Задача такая: найти в файле с кодировкой UTF-8 определенную строку (.fb2 основан на xml, нужно содержимое определенных тегов), для того что-бы разобраться, как происходит считывание из файла набрасал код:
Код:
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"?>, а вторая - все остальное (включая изображения). Т.е. для того что-бы выудить из строки нужное содержимое, надо в эту строку считать весь файл, а искомый текст находится, как правило, в самом начале файла. Задача состоит в том, что-бы считывать из файла пока не будет найдено искомое, а дальше можно смело закрывать файл.