Здравствуйте, pravsha, Вы писали:
P>Народ, подскажите, пожалуйста, чем можно пользоваться, для перемещения по текстовому файлу? Есть какой-ниубдь аналог Seek для них.
Здравствуйте, pravsha, Вы писали:
S>>а чем ReadLn пока не EOF не угодил? P>Readln всем хорош, но проблемма не в нем. P>Seek не рабоитат с F:TextFile; А Readln только с ними и работает...
ну, а что тебе надо-то?
вопрос задай по конкретнее (:
S>ты спросил — я ответил.
Извини.
Мне надо уметь запомнить текущую позицию в текстовом файле, а потом к ней вернутся и прочитать что-нибудь. FilePos и Seek не подходят.
Здравствуйте, pravsha, Вы писали:
S>>ты спросил — я ответил. P>Извини. P>Мне надо уметь запомнить текущую позицию в текстовом файле, а потом к ней вернутся и прочитать что-нибудь. FilePos и Seek не подходят.
ты так и не оветил, чем Seek не подходит. может приведешь пример кода с "недостающей" для тебя ф-цией и пояснишь, чего бы с нее хотел.
Здравствуйте, pravsha, Вы писали:
S>>ты спросил — я ответил. P>Извини. P>Мне надо уметь запомнить текущую позицию в текстовом файле, а потом к ней вернутся и прочитать что-нибудь. FilePos и Seek не подходят.
на а если его открывать как простой File и, читая из него, уже составлять нужные тебе строки?
как раз и FilePos и Seek будет работать.
Здравствуйте, .silent, Вы писали:
S>Здравствуйте, pravsha, Вы писали:
S>>>ты спросил — я ответил. P>>Извини. P>>Мне надо уметь запомнить текущую позицию в текстовом файле, а потом к ней вернутся и прочитать что-нибудь. FilePos и Seek не подходят.
S>на а если его открывать как простой File и, читая из него, уже составлять нужные тебе строки? S>как раз и FilePos и Seek будет работать.
Тогда ReadLn не работает м таким файлом.
А читать BlockRead-ом геморно. Хотелось бы попроще.
Здравствуйте, pravsha, Вы писали:
OAB>>ты так и не оветил, чем Seek не подходит. может приведешь пример кода с "недостающей" для тебя ф-цией и пояснишь, чего бы с нее хотел.
P>Seek не подходит, потому что он не работает с тестовыми файлами. P>Так в Хелпе написанно.
P>Мне надо просматривая файл в цикле и запомнить позицию искомой строки. P>А затем ниже к ней вернутся.
Здравствуйте, pravsha, Вы писали:
P>Тогда ReadLn не работает м таким файлом. P>А читать BlockRead-ом геморно. Хотелось бы попроще.
Во книгах по Delphi приводится реализация наследника TFileStream с дополнительным буфером и функциональностью Read(Ln)/Write(Ln). Сам в свое время пользовался таким, только не помню, из какой книжки.
Здравствуйте, Oleg A. Bachin, Вы писали:
OAB>Здравствуйте, pravsha, Вы писали:
OAB>>>какой размер файла? P>>~ 100 Кб
OAB>не хочешь заморачиваться с TStream напрямую — бери TStringList.LoadFromFile. и строка будет и номер...
Можно и загружать, но ведь это лишнее вермя, действие.
TStram в принципе подходит.
Спасибо за ответы!
Здравствуйте, pravsha, Вы писали:
P>Народ, подскажите, пожалуйста, чем можно пользоваться, для перемещения по текстовому файлу? Есть какой-ниубдь аналог Seek для них.
Дело в том, что у текстового файла есть специальный буфер, куда информация считывается заблаговременно, поэтому функции Seek и FilePos для них не работают. Следующий простой пример показывает, как можно перемещаться по текстовому файлу.
program Project1;
{$APPTYPE CONSOLE}uses SysUtils, Windows;
var
F: TextFile;
S: String;
P: DWORD;
function TextFilePos(var F: TextFile): DWORD;
begin{Получаем позицию в файле}
Result := SetFilePointer(TTextRec(F).Handle, 0, NIL, FILE_CURRENT);
{Производим корректировку с учетом буфера}
Result := Result - TTextRec(F).BufSize + TTextRec(F).BufPos;
end;
procedure SeekTextFile(var F: TextFile; Position: DWORD);
begin{Устанавливаем файловый указатель}
SetFilePointer(TTextRec(F).Handle, Position, NIL, FILE_BEGIN);
{Говорим что зараенне считанный буфер уже пуст}
TTextRec(F).BufPos := TTextRec(F).BufEnd;
end;
begin
Assign(F, 'C:\a.txt');
Reset(F);
Readln(F, S);
Writeln(1, S);
P := TextFilePos(F);
Readln(F, S);
WRiteln(2, S);
SeekTextFile(F, P);
Readln(F, S);
WRiteln(3, S);
Close(F);
Readln;
end.
Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, pravsha, Вы писали:
P>>Тогда ReadLn не работает м таким файлом. P>>А читать BlockRead-ом геморно. Хотелось бы попроще.
W>Во книгах по Delphi приводится реализация наследника TFileStream с дополнительным буфером и функциональностью Read(Ln)/Write(Ln). Сам в свое время пользовался таким, только не помню, из какой книжки.