Автор
|
Тема: Readln/Writeln и UNIXовый End-Of-Line
|
rusalex |
опубликован 18-01-2002 21:01 MSK
Hi многоуважаемый ALL, можно ли заставить ТР6 читать/писать построчно (readln/writeln) файл в UNIXовом формате, т.е. у которого признак конца строки - не chr(13)+chr(10), а просто chr(10)?
|
NOPIK
|
опубликован 19-01-2002 05:21 MSK
Через ReadLn/WriteLn нельзя... Надо заменить на Read/Write... |
7in
|
опубликован 19-01-2002 23:37 MSK
То бишь... WriteLn(F, 'Строчка') заменяешь на Write(F, 'Строчка'#10) |
rusalex
|
опубликован 21-01-2002 13:54 MSK
А ReadLn на что заменять? Read (F, Char) замедляет прогу в 10-12 раз. А чтение блоками - очень усложняет задачу.Поставлю вопрос конкретнее. Есть большой файл, представляющий собой архив почты и, соответственно, состоящий из многих писем. На эти письма его и надо разрезать. Признак нового письма - ключевое слово ('Received') в начале строки. Файлы могут быть как в MSDOS, так и в UNIX-кодировке. Can anybody F1 me? |
NOPIK
|
опубликован 21-01-2002 19:59 MSK
а что сложного в чтении блоками? прочитать блок, заменить все CR на NULL - вот и готовая строка, остается только сканировать блок на нули и копировать в переменные. Если это сложно - можно просто после сканирования записать строки во временный файл с добавлением LF |
NOPIK
|
опубликован 21-01-2002 20:00 MSK
Для последнего случая, конечно же, во время, а не после :-) |
7in
|
опубликован 22-01-2002 23:51 MSK
2 NOPIK: ...что заметно ускорит работу :) 2 РусскийСашка: Читай болками и добавляй в строку. Как встретишь LF, строка готова. Затем остаток буфер копируешь в начало (буфера), запоминаешь позицию и в следующий раз из файла читаешь уже на остаток байт меньше :)))))))))) |
NOPIK
|
опубликован 23-01-2002 02:02 MSK
А зачем тогда дополнительное копирование? Не проще сразу в строку? Все равно ведь фрагменты складывать. А конкатенация явно быстрее вызова функции. |
7in
|
опубликован 23-01-2002 23:46 MSK
Всё может быть и быть всё может. Лишь одного не может быть: того, что точно быть, всё остальное может быть! :))) |