|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Чтение из файла. UTF-8
Задача такая: найти в файле с кодировкой 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; Проблемма в том, что, фактически файл состоит из двух строк - первая примерно такого вида: <?xml version="1.0" encoding="UTF-8"?>, а вторая - все остальное (включая изображения). Т.е. для того что-бы выудить из строки нужное содержимое, надо в эту строку считать весь файл, а искомый текст находится, как правило, в самом начале файла. Задача состоит в том, что-бы считывать из файла пока не будет найдено искомое, а дальше можно смело закрывать файл. |
#2
|
|||
|
|||
1. Скачать какой-нить SAX-парсер. Он читает файл по кусочкам.
2. Читать файл по кусочкам самому, через, например, File Of Byte или через поток (TFileStream). |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Помидоркин (21.03.2015)
|
#3
|
||||
|
||||
Я бы просто XML парсер бы взял. Не думаю, что найдутся fb2 книги, размером в несколько сотен мегабайт.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Помидоркин (22.03.2015)
|
#4
|
||||
|
||||
Цитата:
Цитата:
Пробовал поставить LibXmlParser (Author : Stefan Heymann), вроде установл, но выдает ошибку. К тому-же не нашел документации на русском (английским к сожалению не владею), нашел только, как использовать SAX-парсер на примере Java. В общих чертах понял так: подсовываем парсеру наш файл, запускаем, при возникновении определенной ситуации (например парсер натыкается на какой-нибудь тэг) возникает соответствующее событие, на которое нужно написать обработчик. Как это сделать в Дельфи непонятно. |
#5
|
||||
|
||||
Фигня "ваши" парсеры, в смысле не для данной, они, задачи. А вот File Of Byte, в данном случае, то что нужно (еще раз спасибо lmikle), пришлось повозиться с кодировкой, но вроде разобрался.
|
#6
|
|||
|
|||
Ну и молодец, что разобрался.
Ты ж задачу описал довольно обще, вот и получил несколько разных вариантов решения. ЗЫ. Первая же ссылка в гугле по поводу Delphi saz xml parset: http://saxforpascal.sourceforge.net/ |