|
ТекстовыйДокумент, ЗаписьТекста - при записи добавляет ВК+ПС в конец файла. | ☑ | ||
---|---|---|---|---|
0
areaho0ray
25.11.15
✎
06:23
|
Добрый день!
Сижу, колдую над записью текста в 8.3. При записи текста в файл добавляет строку в конец файла вида Символы.ВК + Символы.ПС, т.е. просто вставляет разделитель. В общем, вот такой код: Текст = Новый ТекстовыйДокумент; Текст.ДобавитьСтроку("Халям-Балям"); Текст.Записать("C:\ANSI.TXT", КодировкаТекста.ANSI); По логике в файле должна быть одна строка, но зайдя любым блокнотом в файл видно 2 строки. При этом, если файл прочитать методом Прочитать(), а потом глянуть сколько в тексте строк - все будет нормально, то есть 1Ска считает, что все гуд. Собственно сам вопрос - кто сталкивался? Как лечить? |
|||
1
Горогуля
25.11.15
✎
06:32
|
>По логике в файле должна быть одна строка
там и есть одна строка |
|||
2
areaho0ray
25.11.15
✎
06:35
|
(1) Читайте дальше.
|
|||
3
Мэс33
25.11.15
✎
06:35
|
(0) Все верно.
|
|||
4
Горогуля
25.11.15
✎
06:35
|
(2) готово
|
|||
5
Мэс33
25.11.15
✎
06:37
|
(0)
Различные операционные системы придерживаются своего представления перевода строки и конца файла. В DOS и Windows перевод строки кодируется последовательностью двух символов: CR и LF. |
|||
6
areaho0ray
25.11.15
✎
06:37
|
(3) То есть, с помощью средств 1С нормально текст в файл не записать - она будет постоянно дописывать разделитель в конец файла?
|
|||
7
Горогуля
25.11.15
✎
06:38
|
(6) с помощью средств 1С нормально текст в файл записать
|
|||
8
areaho0ray
25.11.15
✎
06:39
|
(7) Большое спасибо за Ваше развернутое объяснение.
|
|||
9
Горогуля
25.11.15
✎
06:40
|
да не за что
|
|||
10
Мэс33
25.11.15
✎
06:48
|
(9) Эх, умеете вы все доходчиво объяснять.
|
|||
11
Горогуля
25.11.15
✎
06:49
|
(10) у меня на три слова больше, чем в (3) получилось ;)
|
|||
12
Мэс33
25.11.15
✎
06:50
|
А по сути - если не нужны символы конца строки и перевода каретки, то открывай файл в бинарном виде и выкусывай последние байты )))).
Правда потом любой текстовый редактор опять проставит эти символы. |
|||
13
Провинциальный 1сник
25.11.15
✎
06:52
|
(8) Под "текстом" 1с понимает набор строк из минимум одной строки символов(возможно пустой). Каждая строка обязательно заканчивается символами конца строки.
(12) Не любой. В фаре редактор сам не добавляет перевод строки, если не нажимать Enter. |
|||
14
User_Agronom
25.11.15
✎
06:55
|
(0) Скоро автор узнает про символ EOF - вот это будет приключение!
|
|||
15
Горогуля
25.11.15
✎
06:57
|
(13) ну положим, не обязательно заканчивается переводом...
|
|||
16
Провинциальный 1сник
25.11.15
✎
06:58
|
Самая большая проблема этого плана - невозможность в 1с без внешних костылей работать с двоичными данными. Казалось бы, чего проще - сделать у объекта ДвоичныеДанные возможность обратиться к произвольному байту через [] и пару дополнительных методов (Вырезать,Вставить). Но не хотят, редиски..
|
|||
17
areaho0ray
25.11.15
✎
06:59
|
(12) Не знаю таких редакторов, даже notepad виндовый не проставит, если Enter не нажать.
(14) К сожалению, EOF != EOLN, и в 1С нет возможности с ними работать. |
|||
18
User_Agronom
25.11.15
✎
07:05
|
(17) Извини, но тема ни о чём: 1С-ка файл записыват, файл читает и, кроме того, читает то, что записала и как записала.
А есть ли в последней строке комбинация EOL+CR не существенно. |
|||
19
Мэс33
25.11.15
✎
07:05
|
(17) (13) Даже если открыть в режиме редактирования и сохранить?
|
|||
20
Провинциальный 1сник
25.11.15
✎
07:08
|
(18) Иногда существенно, если например нужно создавать unix-текст.
|
|||
21
mehfk
25.11.15
✎
07:12
|
(0) Делай так
Текст = Новый ЗаписьТекста; Текст.Открыть("C:\ANSI.TXT", КодировкаТекста.ANSI); Текст.Записать("Халям-Балям"); Текст.Закрыть(); |
|||
22
areaho0ray
25.11.15
✎
07:12
|
(18) Очень даже существенно, ибо это пустая строка, а так как мне надо сохранить все как .CSV и дальше файл будет обрабатываться в другой системе, то последняя пустая строка все испортит.
(19) Да, именно так. |
|||
23
Мэс33
25.11.15
✎
07:14
|
(22) Что за другая система, если не секрет? Эта другая система не понимает CR+LF?
|
|||
24
areaho0ray
25.11.15
✎
07:14
|
(21) Что бы закрыть что-нибудь, надо вначале это что-нибудь открыть :) Нет такого метода.
|
|||
25
areaho0ray
25.11.15
✎
07:15
|
(23) Нет, она-то как раз-таки и понимает, и не хочет пустую строку отсеивать.
|
|||
26
mehfk
25.11.15
✎
07:17
|
(24) Тупишь?
|
|||
27
User_Agronom
25.11.15
✎
07:19
|
(20) текстовые файлы одинаково прекрасно открываются как в глюкавой поделке Гейстса, так и в *nix системах, независимо от того, где созданы.
Текст, он и в АФрике текст. |
|||
28
areaho0ray
25.11.15
✎
07:21
|
(26) Товарищ, я действительно туплю, большое вам спасибо, помогло!
|
|||
29
Мэс33
25.11.15
✎
07:26
|
(28) И теперь нет пустой строки?
|
|||
30
areaho0ray
25.11.15
✎
07:27
|
(29) Можете мне не верить - но нет.
|
|||
31
Мэс33
25.11.15
✎
07:31
|
(30) Отчего же? Верю.
Просто с такой задачей не сталкивался. А сопряженные системы легко понимали csv с пустой строкой в конце. |
|||
32
Провинциальный 1сник
25.11.15
✎
07:42
|
(27) Нет. У многих программ в линуксе ini-файлы не работают, если созданы в дос-тексте с cr+lf. Или программы на всяких скриптовых языках типа perl.
|
|||
33
areaho0ray
25.11.15
✎
07:45
|
(32) Ну тут вопрос не к ОС, а к среде исполнения этого самого ini файла.
|
|||
34
George Wheels
25.11.15
✎
07:48
|
Текст.УстановитьТекст("любой текст") не добавляет разделители, но неудобно в этот файл что-то дописывать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |