![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск по файлам [D7, WinXP]
KorvinOE © (2005-10-31 18:05:00)Приветствую, мастера!
Имеется архив файлов (.doc). Необходимо организовать поиск по содержимому файлов. А точнее хотелось бы узнать какими ф-циями API можно вызвать поиск, который есть в Windows-Explorer по клавише F3. Зарание спасибо!
KorvinOE (2005-11-03 09:18:00) [1]
> umbra © (02.11.05 19:16) [8]
Спасибки, umbra! По ссылке обсуждение похожей темы:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1129763043&n=18
umbra (2005-11-02 19:16:00) [2]дело в том, что в доковском файле сам текст занимает только меньшую часть. И он расположен в конкретном месте файла. Чтобы читать именно текст, а не служебную информацию, данные о стилях, шрифтах и т.д. надо читать начиная с определенного места файла, которое указано тоже где-то в файле. В общем, надо разобраться с форматом документа ворд. В другой Вашей ветке про вывод текста в мемо Digitman дал ссылку на сайт, откуда можно скачать спецификацию формата документа ворд. Для извлечения текста лучше сначала изучить спецификацию.
KorvinOE (2005-11-02 18:32:00) [3]> readln читает файл до первого символа конца строки. В бинарном файле этот символ может быть где угодно
А как с этим справиться. При чтении файла я получил WideString. Но в ней куча этих символов конца строки. И всякие попытки преобразовать WideString в String, чтобы вывести результат в Мемо, обвенчались тем, что я получаю только те символы, которые стоят до первого символа конца строки.
Тот код что я написал до этого работает криво и не для всякого документа.
Как же конвертировать WideString в String?
KorvinOE (2005-11-02 16:11:00) [4]ЧТО ЭТО?
Вот код:
procedure TForm1.Button3Click(Sender: TObject);
var
P: array [0..255] of WideChar;
F: TFileStream;
S: string;
begin
F:=TFileStream.Create('D:\1.doc',fmOpenRead);
while not (F.Size = F.Position) do
begin
F.Read(P,SizeOf(P));
S:=S+WideCharToString(P);
end;
F.Free;
RichEdit1.Text:=S;
end;
, который открывает указанный файл в RichEdit. Размер массива "Р" указал случайно (255). Но если поменять размер массива на другой, то ничего работать так как надо не хочет.
ВОПРОС: Правильно ли я преобразую Unicode в String? И Как мне одной командой, а не циклом, загрузить сразу весь файл?
KorvinOE (2005-11-02 12:34:00) [5]Спасибо umbra! С помощью
TFileStreamполучилось.
umbra (2005-11-02 10:24:00) [6]
> Уникод (Unicode) - это UTF-8
Уникод - это стандарт, где каждому символу каждого языка соответствует уникальный код. Кроме UTF-8 может быть еще UTF-16.
> F: TextFile;
>
Доковский файл - не текстовый, он бинарный.
> readln(f,k);
>
readlnчитает файл до первого символа конца строки. В бинарном файле этот символ может быть где угодно.
Для бинарных файлов лучше использоватьTFileStream.
KorvinOE (2005-11-02 09:41:00) [7]Поправте меня пожалуйста если я не прав!
Уникод (Unicode) - это UTF-8. В делфи для смены кодировки есть такие функции:
UnicodeToUtf8();
Utf8ToUnicode();
Utf8ToAnsi();
AnsiToUtf8();
И если я читаю из файла .DOC следующим кодом:
var
F: TextFile;
k: Widestring;
i,j: integer;
S: string;
begin
AssignFile(F,'1.doc');
Reset(F);
while not EOF(f) do
begin
readln(f,k);
S:=Utf8ToAnsi(k); //<- Какая ф-ция должна быть здесь?
Memo1.Lines.Add(S);
inc(i);
end;
end;
, то из всего файла в мемо записывается 4-5 строчек в каждой по "|".
Поправьте, плиз, т.к. с кодировками я ещё не сталкивался
umbra (2005-11-01 19:47:00) [8]можно открыть файл, и читать из него, проверяя, не совпало ли прочитанное из файла с образцом. В ворде текст содержится в уникоде, поэтому строку-образец надо перевести в уникод. для английских букв достаточно перед каждым символом вставить
#0, для русских -#4.
KorvinOE (2005-11-01 19:22:00) [9]Это что получается? Windows может искать по содержимому DOC-файлов без помощь Word-а, а Delphi не может?