Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-1134551437
Narik
2005-12-14 12:10
2006.01.08
Удаление папки...


14-1133938255
lipskiy
2005-12-07 09:50
2006.01.08
Пользовательский интерфейс для регулярных выражений


14-1134647613
Хинт
2005-12-15 14:53
2006.01.08
Оптимизация и/или защита DLL


14-1134508044
Kerk
2005-12-14 00:07
2006.01.08
Cyber Underground Community VS Terrorism


14-1134396057
VirEx
2005-12-12 17:00
2006.01.08
синхронизация потоков в API





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский