Имя: Пароль:
1C
1С v8
ТекстовыйДокумент, ЗаписьТекста - при записи добавляет ВК+ПС в конец файла.
, ,
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
Текст.УстановитьТекст("любой текст") не добавляет разделители, но неудобно в этот файл что-то дописывать.