![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работая с текстовым файлом
ИМХО © (2004-11-21 16:42:00)Как узнать текущую позицию?
Ситуация такова: читается текстовый файл от начала и до самого конца (с помощью ReadLn).
Нужно "запоминать" определенные места (начало и конец блока), чтобы затем быстро обращаться к ним.
Как это осуществить?
ИМХО (2004-11-21 17:10:00) [21]ставим так вопрос:
как при последовательном чтении текстового файла с использованием ReadLn ПРАВИЛЬНО подсчитать количество байтов?
ИМХО (2004-11-21 17:08:00) [22]но почему по формуле
Sum := Sum + Length(Str) + 2
кол-во байтов считается неверно???
Anatoly Podgoretsky (2004-11-21 17:01:00) [23]ИМХО © (21.11.04 16:54) [2]
Это уже не текстовые файлы, а VCL обвязка над низкоуровневым АПИ работы с двоичными данными, для работы как с текстовыми файлам тебе придется поверх ее реализовать всю функциональность ReadLn
ИМХО (2004-11-21 17:01:00) [24]допустим, стою я на 100-й строке.
Как определить смещение первого символа этой строки относительно начала файла???
ИМХО (2004-11-21 16:58:00) [25]"Что делать?" (с) Чернышевский
ИМХО (2004-11-21 16:56:00) [26]для некоторых файлов по какой-то неведомой причине счетчик накручивает больше байтов, чем есть, поэтому MessageStr получается не тот, что надо
ИМХО (2004-11-21 16:54:00) [27]я считаю байты:
Sum := Sum + Length(Str) + 2;
чтобы затем обратиться так
MyStream := TFileStream.Create(FName, fmOpenRead or
fmShareDenyNone);
try
MyStream.Position := Start_Index;
SetLength(MessageStr, Finish_Index);
MyStream.Read(MessageStr[1], Finish_Index);
finally
MyStream.Free;
end;
ДЛЯ НЕКОТОРЫХ ФАЙЛОВ ЭТОТ МЕТОД НЕ КАТИТ!
Anatoly Podgoretsky (2004-11-21 16:48:00) [28]Считай или байты или строки, а насчет быстро, текстовый файл это устройство последовательного доступа.