Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.015 c
14-1127144234
Juice
2005-09-19 19:37
2005.10.09
Самые крутые db-aware ?


14-1126728661
syte_ser78
2005-09-15 00:11
2005.10.09
Стоит ли апгрейдится?


3-1123867184
Silver...
2005-08-12 21:19
2005.10.09
CrossTable + Редактирование


14-1126869057
Kerk
2005-09-16 15:10
2005.10.09
Спам создает общественное мнение


2-1125304120
-=snoop=-
2005-08-29 12:28
2005.10.09
не работает select





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский