Форум: "WinAPI";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
ВнизПоиск по файлам Найти похожие ветки
← →
KorvinOE © (2005-10-31 18:05) [0]Приветствую, мастера!
Имеется архив файлов (.doc). Необходимо организовать поиск по содержимому файлов. А точнее хотелось бы узнать какими ф-циями API можно вызвать поиск, который есть в Windows-Explorer по клавише F3. Зарание спасибо!
← →
KorvinOE © (2005-11-01 19:22) [1]Это что получается? Windows может искать по содержимому DOC-файлов без помощь Word-а, а Delphi не может?
← →
umbra © (2005-11-01 19:47) [2]можно открыть файл, и читать из него, проверяя, не совпало ли прочитанное из файла с образцом. В ворде текст содержится в уникоде, поэтому строку-образец надо перевести в уникод. для английских букв достаточно перед каждым символом вставить
#0
, для русских -#4
.
← →
KorvinOE © (2005-11-02 09:41) [3]Поправте меня пожалуйста если я не прав!
Уникод (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-02 10:24) [4]
> Уникод (Unicode) - это UTF-8
Уникод - это стандарт, где каждому символу каждого языка соответствует уникальный код. Кроме UTF-8 может быть еще UTF-16.
> F: TextFile;
>
Доковский файл - не текстовый, он бинарный.
> readln(f,k);
>readln
читает файл до первого символа конца строки. В бинарном файле этот символ может быть где угодно.
Для бинарных файлов лучше использоватьTFileStream
.
← →
KorvinOE © (2005-11-02 12:34) [5]Спасибо umbra! С помощью
TFileStream
получилось.
← →
KorvinOE © (2005-11-02 16:11) [6]ЧТО ЭТО?
Вот код:
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 18:32) [7]> readln читает файл до первого символа конца строки. В бинарном файле этот символ может быть где угодно
А как с этим справиться. При чтении файла я получил WideString. Но в ней куча этих символов конца строки. И всякие попытки преобразовать WideString в String, чтобы вывести результат в Мемо, обвенчались тем, что я получаю только те символы, которые стоят до первого символа конца строки.
Тот код что я написал до этого работает криво и не для всякого документа.
Как же конвертировать WideString в String?
← →
umbra © (2005-11-02 19:16) [8]дело в том, что в доковском файле сам текст занимает только меньшую часть. И он расположен в конкретном месте файла. Чтобы читать именно текст, а не служебную информацию, данные о стилях, шрифтах и т.д. надо читать начиная с определенного места файла, которое указано тоже где-то в файле. В общем, надо разобраться с форматом документа ворд. В другой Вашей ветке про вывод текста в мемо Digitman дал ссылку на сайт, откуда можно скачать спецификацию формата документа ворд. Для извлечения текста лучше сначала изучить спецификацию.
← →
KorvinOE © (2005-11-03 09:18) [9]
> umbra © (02.11.05 19:16) [8]
Спасибки, umbra! По ссылке обсуждение похожей темы:
http://delphimaster.net/view/2-1129763043/
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.007 c