![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
прочитать 2 последние строчки текстового файлы
Padre © (2006-04-27 20:46:00)Как я могу узнать значение 2х последних строчек текстового файла?
jack128 (2006-04-29 16:04:00) [1]kester © (28.04.06 20:08) [7]
затем, что это для больших файлов - это гараздо быстрее будет работать.. Тут где то рядом как раз пробегал вопрос про сортировку 2 гиговых текстовых файлов..
Германн (2006-04-29 01:50:00) [2]
> Anatoly Podgoretsky © (28.04.06 21:32) [8]
>
> Для этого надо прочитать все предыдущие или отказаться от
> текстовых файлов в пользу бинарных и читать с конца. Для
> больших файлов идеальное решение.
>
Добавлю ещё своё ИМХО.
Нужно, в первую очередь, как обучали нас на военной кафедре, "Поставить задачу"!
Задача "прочитать две последние строки" кажется мне очень уж не мотивированной!
А уж после следует "Принять решение"!
Anatoly Podgoretsky (2006-04-28 21:32:00) [3]Для этого надо прочитать все предыдущие или отказаться от текстовых файлов в пользу бинарных и читать с конца. Для больших файлов идеальное решение.
kester (2006-04-28 20:08:00) [4]jack128
Да, ты прав. Так тогда какая разница, использовать LoadFromFile или самому корячиться))
Vetas (2006-04-28 17:40:00) [5]
Var s,s1:string;
f:textfile;
Begin
s:='';s1:='';
assignfile(f,'Имя файла');
reset(f);
while not eof(f) do
Begin
s1:=s;
s:=readln(f,s);
End;
CloseFile(f);
// В s - последняя строка, в s1 - предпоследняя.
End;
jack128 (2006-04-28 14:50:00) [6]kester © (27.04.06 23:48) [3]
Но, посимвольно, во-первых, лишний загруз процессора (хотя и совершенно незначительный, но все же),
наивная духа. А как ты думаешь TStrings.LoadFromFile весь файл на строки разбивает? Точно так же посимвольно анализирует содержимое файла..
balepa (2006-04-28 06:06:00) [7]
> kester © (27.04.06 23:48) [3]
> загруз своих собственных мозгов =)
Так мозги надо тренировать.
kester (2006-04-27 23:48:00) [8]по-моему, проще всего так:
var
t:TStringList;
begin
t:=TStringList.Create;
t.LoadFromFile('xfile.txt');
showmessage(t.Strings[t.count-1]); //последняя строка
showmessage(t.Strings[t.count-2]); //предпоследняя строка
t.Free;
end;
третий способ интересен =)
Но, посимвольно, во-первых, лишний загруз процессора (хотя и совершенно незначительный, но все же), во-вторых, загруз своих собственных мозгов =)
jack128 (2006-04-27 22:23:00) [9]Virgo_Style © (27.04.06 21:09) [1]
нормальный способ.. Правда чтение лудше буффиризировать.. А то посимвольно читать из файла - не кузяво как то..
Virgo_Style (2006-04-27 21:09:00) [10]Например,
- загрузить все (TStringList.LoadFromFile) и выбрать нужное.
- читать построчно, сохраняя текущую и предыдущую, до самого конца.
- открыть как бинарный, читать посимвольно, смещаясь назад, пока не доберешься до начала или третьего символа/комбинации символов, обозначающих новую строку.
Кстати, буду рад комментарию по поводу способа 3... Чудится мне в нем какой-то подвох, но не уверен %-)