Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2008, 15:25   #1
Dennikid
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 39
Печаль Как убыстрить поиск?

провожу поиск файла с словами с помощью:

Код:
Function WSS(ADocument: TFileName; Search1,Search2,Search3:string): Boolean;
const
  wdFindContinue = 1;
  wdReplaceOne = 1;
  wdReplaceAll = 2;
  wdDoNotSaveChanges = 0;
var
  WordApp: OLEVariant;
begin
  Result := False;

  { Существует ли файл }
  if not FileExists(ADocument) then
  begin
    ShowMessage('Файл не найден!');
    Exit;
  end;

  { Создаем OLE объект }
  try
    WordApp := CreateOLEObject('Word.Application');
  except
    on E: Exception do
    begin
      E.Message := 'Word недоступен';
      raise;
    end;
  end;

  try
    WordApp.Visible := False;
    { Открываем документ }
    WordApp.Documents.Open(ADocument);
    WordApp.Selection.Find.ClearFormatting;
    WordApp.Selection.Find.Text := Search1;//поиск первого слова
    WordApp.Selection.Find.Forward := True;
    WordApp.Selection.Find.Wrap := wdFindContinue;
    WordApp.Selection.Find.Format := False;
    WordApp.Selection.Find.MatchWholeWord := False;
    WordApp.Selection.Find.MatchSoundsLike := False;
    WordApp.Selection.Find.MatchAllWordForms := False;
    result:=WordApp.Selection.Find.Execute;
    if result=true then
    begin
    WordApp.Selection.Find.Text := Search2;//поиск второго слова
    WordApp.Selection.Find.Forward := True;
    WordApp.Selection.Find.Wrap := wdFindContinue;
    WordApp.Selection.Find.Format := False;
    WordApp.Selection.Find.MatchWholeWord := False;
    WordApp.Selection.Find.MatchSoundsLike := False;
    WordApp.Selection.Find.MatchAllWordForms := False;
    result:=WordApp.Selection.Find.Execute;
    if result=true then
    begin
    WordApp.Selection.Find.Text := Search3;//поиск 3 слова
    WordApp.Selection.Find.Forward := True;
    WordApp.Selection.Find.Wrap := wdFindContinue;
    WordApp.Selection.Find.Format := False;
    WordApp.Selection.Find.MatchWholeWord := False;
    WordApp.Selection.Find.MatchSoundsLike := False;
    WordApp.Selection.Find.MatchAllWordForms := False;
    result:=WordApp.Selection.Find.Execute;
    end;
    end;
    finally
    { Закрываем Word }
    WordApp.Quit;
    WordApp := Unassigned;
  end;
end;

но у меня 3500 файлов для поиска((((((( процесс очень долгим обещает быть(((( Как убыстрить процесс?
Dennikid вне форума Ответить с цитированием
Старый 30.10.2008, 21:32   #2
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

помниться 90 % всех методов не нужно поэксперементируйте удалите лишнее, может вообще окажется что
чтото вроде

WordApp.Selection.Find.Text := Search1;//поиск первого слова
result:=WordApp.Selection.Find.Exec ute;

Вообще это какой то изврат 3 раза одинаковый код писать *SCRATCH*

Кстати ИМХО не стоит каждый раз закрывать Ворд просто документ меняйте.
Знаете сколько он времнеи открывается?

И Я поиск делал . 800 файлов перебирал и составлял оглавение для ресура, читай сайта *THUMBS UP*

ЗЫ://Блин исправьте этот убыстрить на ускорить кто-нибудь, пожалуйста
Don't worry be happy

Последний раз редактировалось Izhic; 30.10.2008 в 21:46.
Izhic вне форума Ответить с цитированием
Старый 31.10.2008, 09:37   #3
Dennikid
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 39
По умолчанию

3 раза одинаковый код, потому что ищу 3 разных слова.
"читай сайта" - это где?

Код:
Кстати ИМХО не стоит каждый раз закрывать Ворд просто документ меняйте. 
Знаете сколько он времнеи открывается?
а знаешь сколько 3500 открытых файлов ресов жрут?

Последний раз редактировалось Dennikid; 31.10.2008 в 10:01.
Dennikid вне форума Ответить с цитированием
Старый 31.10.2008, 10:52   #4
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от Dennikid Посмотреть сообщение

... а знаешь сколько 3500 открытых файлов ресов жрут?
Зачем же их все открытыми держать? Например,

Код:
WordApp.ActiveDocument.Close; {закрываем активный документ Ворда}
WordApp.Documents.Open(ADocument); {загружаем следующий, не закрывая Ворда}
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 31.10.2008, 10:57   #5
Alex.rus
Пользователь
 
Аватар для Alex.rus
 
Регистрация: 02.12.2007
Сообщений: 26
По умолчанию

Пиши на Асемблере будет намного быстрей.
Alex.rus вне форума Ответить с цитированием
Старый 31.10.2008, 11:04   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Мда... странные вы... Какая разница на ассемблере или нет?! Тут ясно сразу, вы используите OLE для каждого документа, ну и пока каждый OLE Word объект подключит к каждому документу а потом уже начнет что-то искать требуется не мало времени. Тут дело не в коде, а в самом способе поиска!
BOBAH13 вне форума Ответить с цитированием
Старый 31.10.2008, 11:11   #7
Dennikid
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 39
По умолчанию

ну wordapp.close я нашел - ненамного ускорилось(((((
так подскажите как искать пошустрее (каким способом)?
Dennikid вне форума Ответить с цитированием
Старый 31.10.2008, 11:35   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Я же вроде сказал... наверное лучший вариант, это разобраться с форматом word файла потом открывать его и читать текст и искать нужны слова... это я думаю будет намного быстрее чем через OLE объекты... ну а если вам лень что-либо делать... тогда смеритесь с этим способом... ускорить работу OLE не выйдет... это отдельная программа... как вы ее ускорите интересно..
BOBAH13 вне форума Ответить с цитированием
Старый 31.10.2008, 16:17   #9
Dennikid
Пользователь
 
Регистрация: 29.09.2008
Сообщений: 39
По умолчанию

я сделал через wordapp.close. как убрать моргание экрана при поиске?
WordApp.Visible:=false, но все равно при открытии документа на экране на доли секунды появляется Word((((
Через OLE поиск в 3500 файлах занял 5 мин))) Но моргание экрана в эти 5 мин достало(((
И как ввести проверку на поврежденность файла? А то сбои происходят(((
Dennikid вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как прописать запрос поиск???? Sexyprogrammist БД в Delphi 10 12.12.2009 00:51
поиск ни как не хочет работать Gooch БД в Delphi 6 05.04.2008 20:53
Как выполнить поиск на винте SeRhy Помощь студентам 1 02.11.2007 16:33
как организовать поиск по дате... Pitbull БД в Delphi 18 24.06.2007 22:28
как реализовать поиск синонимов? borsh Помощь студентам 24 16.12.2006 10:48