Текстовые файлы
От: pravsha Россия  
Дата: 06.07.05 10:49
Оценка:
Народ, подскажите, пожалуйста, чем можно пользоваться, для перемещения по текстовому файлу? Есть какой-ниубдь аналог Seek для них.
Re: Текстовые файлы
От: .silent Россия http://www.bezhetsk.ru
Дата: 06.07.05 11:04
Оценка:
Здравствуйте, pravsha, Вы писали:

P>Народ, подскажите, пожалуйста, чем можно пользоваться, для перемещения по текстовому файлу? Есть какой-ниубдь аналог Seek для них.


а чем ReadLn пока не EOF не угодил?
Re[2]: Текстовые файлы
От: pravsha Россия  
Дата: 06.07.05 11:16
Оценка:
S>а чем ReadLn пока не EOF не угодил?
Readln всем хорош, но проблемма не в нем.
Seek не рабоитат с F:TextFile; А Readln только с ними и работает...
Re[3]: Текстовые файлы
От: .silent Россия http://www.bezhetsk.ru
Дата: 06.07.05 11:38
Оценка:
Здравствуйте, pravsha, Вы писали:

S>>а чем ReadLn пока не EOF не угодил?

P>Readln всем хорош, но проблемма не в нем.
P>Seek не рабоитат с F:TextFile; А Readln только с ними и работает...

ну, а что тебе надо-то?
вопрос задай по конкретнее (:

ты спросил — я ответил.
Re[4]: Текстовые файлы
От: pravsha Россия  
Дата: 06.07.05 11:48
Оценка:
S>ты спросил — я ответил.
Извини.
Мне надо уметь запомнить текущую позицию в текстовом файле, а потом к ней вернутся и прочитать что-нибудь. FilePos и Seek не подходят.
Re[5]: Текстовые файлы
От: Oleg A. Bachin Украина  
Дата: 06.07.05 11:57
Оценка:
Здравствуйте, pravsha, Вы писали:

S>>ты спросил — я ответил.

P>Извини.
P>Мне надо уметь запомнить текущую позицию в текстовом файле, а потом к ней вернутся и прочитать что-нибудь. FilePos и Seek не подходят.

ты так и не оветил, чем Seek не подходит. может приведешь пример кода с "недостающей" для тебя ф-цией и пояснишь, чего бы с нее хотел.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[5]: Текстовые файлы
От: .silent Россия http://www.bezhetsk.ru
Дата: 06.07.05 11:59
Оценка:
Здравствуйте, pravsha, Вы писали:

S>>ты спросил — я ответил.

P>Извини.
P>Мне надо уметь запомнить текущую позицию в текстовом файле, а потом к ней вернутся и прочитать что-нибудь. FilePos и Seek не подходят.

на а если его открывать как простой File и, читая из него, уже составлять нужные тебе строки?
как раз и FilePos и Seek будет работать.
Re[6]: Текстовые файлы
От: pravsha Россия  
Дата: 06.07.05 12:04
Оценка:
OAB>ты так и не оветил, чем Seek не подходит. может приведешь пример кода с "недостающей" для тебя ф-цией и пояснишь, чего бы с нее хотел.

Seek не подходит, потому что он не работает с тестовыми файлами.
Так в Хелпе написанно.

Мне надо просматривая файл в цикле и запомнить позицию искомой строки.
А затем ниже к ней вернутся.
Re[6]: Текстовые файлы
От: pravsha Россия  
Дата: 06.07.05 12:06
Оценка:
Здравствуйте, .silent, Вы писали:

S>Здравствуйте, pravsha, Вы писали:


S>>>ты спросил — я ответил.

P>>Извини.
P>>Мне надо уметь запомнить текущую позицию в текстовом файле, а потом к ней вернутся и прочитать что-нибудь. FilePos и Seek не подходят.

S>на а если его открывать как простой File и, читая из него, уже составлять нужные тебе строки?

S>как раз и FilePos и Seek будет работать.

Тогда ReadLn не работает м таким файлом.
А читать BlockRead-ом геморно. Хотелось бы попроще.
Re[7]: Текстовые файлы
От: Oleg A. Bachin Украина  
Дата: 06.07.05 12:09
Оценка:
Здравствуйте, pravsha, Вы писали:

OAB>>ты так и не оветил, чем Seek не подходит. может приведешь пример кода с "недостающей" для тебя ф-цией и пояснишь, чего бы с нее хотел.


P>Seek не подходит, потому что он не работает с тестовыми файлами.

P>Так в Хелпе написанно.

P>Мне надо просматривая файл в цикле и запомнить позицию искомой строки.

P>А затем ниже к ней вернутся.

какой размер файла?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[8]: Текстовые файлы
От: pravsha Россия  
Дата: 06.07.05 12:12
Оценка:
OAB>какой размер файла?
~ 100 Кб
Re[7]: Текстовые файлы
От: wildwind Россия  
Дата: 06.07.05 12:15
Оценка:
Здравствуйте, pravsha, Вы писали:

P>Тогда ReadLn не работает м таким файлом.

P>А читать BlockRead-ом геморно. Хотелось бы попроще.

Во книгах по Delphi приводится реализация наследника TFileStream с дополнительным буфером и функциональностью Read(Ln)/Write(Ln). Сам в свое время пользовался таким, только не помню, из какой книжки.
Re[9]: Текстовые файлы
От: Oleg A. Bachin Украина  
Дата: 06.07.05 12:25
Оценка:
Здравствуйте, pravsha, Вы писали:

OAB>>какой размер файла?

P>~ 100 Кб

не хочешь заморачиваться с TStream напрямую — бери TStringList.LoadFromFile. и строка будет и номер...
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re[10]: Текстовые файлы
От: pravsha Россия  
Дата: 06.07.05 12:28
Оценка:
Здравствуйте, Oleg A. Bachin, Вы писали:

OAB>Здравствуйте, pravsha, Вы писали:


OAB>>>какой размер файла?

P>>~ 100 Кб

OAB>не хочешь заморачиваться с TStream напрямую — бери TStringList.LoadFromFile. и строка будет и номер...


Можно и загружать, но ведь это лишнее вермя, действие.
TStram в принципе подходит.
Спасибо за ответы!
Re: Текстовые файлы
От: mkopachev  
Дата: 07.07.05 07:31
Оценка:
Здравствуйте, 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.
... << RSDN@Home 1.1.4 @@subversion >>
Re[8]: Текстовые файлы
От: Danchik Украина  
Дата: 07.07.05 15:58
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, pravsha, Вы писали:


P>>Тогда ReadLn не работает м таким файлом.

P>>А читать BlockRead-ом геморно. Хотелось бы попроще.

W>Во книгах по Delphi приводится реализация наследника TFileStream с дополнительным буфером и функциональностью Read(Ln)/Write(Ln). Сам в свое время пользовался таким, только не помню, из какой книжки.


Вот здесь есть такой класс uTextFileStream.pas
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.