Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

Быстрый поиск в текстовом файле   Найти похожие ветки 

 
Domkrat ©   (2005-09-21 13:52) [0]

Доброго дня.
Ув. мастера, если у кого - нибудь есть алгоритм быстрого поиска в большом! текстовом файле, поделитесь пожста.
Может по методу Boyer-Moor - а или что нибудь в этом роде.


 
Digitman ©   (2005-09-21 13:53) [1]

и что мы ищем там ?


 
Domkrat ©   (2005-09-21 14:03) [2]

Текст различной длины, допустим до 255 символов.


 
Anatoly Podgoretsky ©   (2005-09-21 14:10) [3]

Тест сортированый?


 
ShiFT   (2005-09-21 14:20) [4]

http://algolist.manual.ru/search/index.php


 
Domkrat ©   (2005-09-21 14:21) [5]

Сори, не пойму что значит сортированный. Смысл -  поиск определенной строки в файлах.


 
Anatoly Podgoretsky ©   (2005-09-21 14:36) [6]

Алгоритмы разные.


 
Digitman ©   (2005-09-21 14:49) [7]


> Domkrat ©   (21.09.05 14:21) [5]


пример "сортированнго" (по неким соглашениям и критериям) списка строк :

Вася
Вася - мастер
Петя
Петя - подмастерье

он же , но не сортированный:

Петя
Вася - мастер
Петя - подмастерье
Вася

any questions ?


 
umbra ©   (2005-09-21 15:07) [8]

А регэксы не подойдут? Очень мощная штука. Модуль для Делфи есть на
http://RegExpStudio.com


 
Domkrat ©   (2005-09-21 15:10) [9]

Спасибо всем.
Думаю что  >ShiFT   (21.09.05 14:20) [4] для начала достаточно, что бы изучить мат часть.


 
Domkrat ©   (2005-09-21 15:12) [10]

>umbra ©   (21.09.05 15:07) [8]
Спасибо гляну.


 
RDS ©   (2005-09-21 15:48) [11]

Держи, вот завалялось, правда не мое.
=====================================================
Держите, в 100 мегабайтном файле находит строку менее чем за 1 сек., возможно нужны поправки. Будут вопросы - задавайте.

Type TBuffer = Array[0..1000000-1] of byte;
   PBuffer = ^TBuffer;

Function CharPos(AChar:Char; Buffer:Pointer; Size:Integer):Integer;Assembler;
Asm
Cld
Push Es
Push EDi
Push Ds
Pop  Es
Mov  Al , AChar
Mov  EDi, Buffer
Mov  ECx, Size
Push ECx
Repne ScasB
Pop  EAx
Jnz  @@NotMatch
Sub  EAx, ECx
Mov  Result, EAx  // This is odd when optimization is on
Jmp  @@Exit
@@NotMatch:
Mov  Result, -1
@@Exit:
Pop  EDi
Pop  Es
End;

Function CompareStrings(Constant:String; Buffer:PBuffer):Boolean;
Var I:Integer;
Begin
Result := True;
I := 1;
While Result and (I<Length(Constant)) Do
Begin
  Inc(I);
  Result := Result and (Constant[i] = Chr(Buffer^[i-2]));
End;
End;

Function LoadBuffer(var Buffer; var F:File; var SeekPos:Int64):Integer;
Begin
Seek(F, SeekPos);
BlockRead(F, Buffer, 1000000, Result);
SeekPos := FilePos(F);
End;

Function ConstantExists(FileName, Constant: String):Boolean;
Var Buffer  : PBuffer;
  SeekPos : Int64;
  F       : File;
  BufSize : Integer;
  BufPos  : Integer;
  SearchResult : Integer;
Begin
Result := False;

If FileExists(FileName) Then
Begin
  SeekPos := 0;
  New(Buffer);
  Assign(F, FileName);
  Reset(F,1);

  Repeat
    BufSize := LoadBuffer(Buffer^, F, SeekPos);
    BufPos  := 0;
    While (Not Result) and (BufPos>=0) Do
    Begin
      SearchResult := CharPos( Constant[1], @Buffer^[BufPos], BufSize-BufPos );
      If SearchResult>0 Then BufPos := BufPos + SearchResult
                        Else BufPos := -1;
      If SearchResult<>-1 Then
      Begin
       Result := CompareStrings(Constant, @Buffer^[BufPos]);
       BufPos := BufPos + 1;
      End;

      If BufPos>=BufSize Then BufPos := -1;
    End;
  Until (BufSize=0) Or Result;

  Close(F);
End;
End;

procedure TForm1.Button3Click(Sender: TObject);
begin
If ConstantExists(Edit1.Text, Edit2.Text) Then
   ShowMessage("Found")
Else
   ShowMessage("Not Found");
end;



Страницы: 1 вся ветка

Текущий архив: 2005.10.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
14-1127249587
Джо
2005-09-21 00:53
2005.10.09
Проверка доступности сайта


14-1126822620
Германн
2005-09-16 02:17
2005.10.09
Формат файла Autorun.inf


1-1126718955
WST
2005-09-14 21:29
2005.10.09
-= нечеткое сравнение строк =-


3-1125052170
erika
2005-08-26 14:29
2005.10.09
Работа с DATE


1-1126788890
Дмитрий_05
2005-09-15 16:54
2005.10.09
Плагин к Oper-е