Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск по файлам [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 не может?


Наверх

Титульная страница Поиск, карта сайта Написать письмо