Задача такая: найти в файле с кодировкой UTF-8 определенную строку (.fb2 основан на xml, нужно содержимое определенных тегов), для того что-бы разобраться, как происходит считывание из файла набрасал код:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | var
Form1: TForm1;
F: TextFile;
implementation
{$R *.dfm}
procedure TForm1 . FormCreate(Sender: TObject);
begin
AssignFile(F, 'Klarkson.fb2' );
Reset(F);
end ;
procedure TForm1 . FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(F);
end ;
procedure TForm1 . Button1Click(Sender: TObject);
var s: UTF8String;
begin
Memo1 . Clear;
Readln(F,s);
Memo1 . Lines . Append(Utf8ToAnsi(s));
end ;
|
Как я понял AssignFile(F,'Klarkson.fb2'); Reset(F); , так сказать подготавливают файл к чтению (записи), а Readln(F,s); считывает из файла построчно, т.е.
чтения всего файла не происходит.
Проблемма в том, что, фактически файл состоит из
двух строк - первая примерно такого вида:
<?xml version="1.0" encoding="UTF-8"?>, а вторая - все остальное (включая изображения). Т.е. для того что-бы выудить из строки нужное содержимое, надо в эту строку считать весь файл, а искомый текст находится, как правило, в самом начале файла. Задача состоит в том, что-бы считывать из файла пока не будет найдено искомое, а дальше можно смело закрывать файл.