Вниз
Скачать: CL | DM;

Поиск по текстовому файлу   Найти похожие ветки 

 
TG ©   (2005-11-18 15:49) [0]

У важаемые мастера. Помогите с написание алгоритма поиска по текстовому файлу. Мне нужен алгоритм более менее быстрый, а то у меня получаеться какойто уж тормознутый. Ну или хотябы где можно найти инфу на эту тему?


 
alex_*** ©   (2005-11-18 16:51) [1]

Ты опиши свой алгоритм для начала


 
Igorek ©   (2005-11-18 16:51) [2]

Ищем первый символ.. нашли - второй совпадает? да - третий... нашли подстроку; нет - ищем первый дальше.


 
Плохиш ©   (2005-11-18 16:54) [3]

Pos


 
Serg1981 ©   (2005-11-18 23:51) [4]

А может текстовый файл загрузить в TStringList ? Поиск в памяти происходит мгновенно.


 
TUser ©   (2005-11-19 09:10) [5]

См. например, алгоритм Кнута-Мориса-Прата.


 
TUser ©   (2005-11-19 09:33) [6]

Есть и более быстрые реализации такого алгоритма, но я привожу простейшую.

program kmp;
{$apptype console}
uses Classes, SysUtils;

function KMPPos (const Text: string; const Template: string): integer;
var sp: array of integer;
    i, j, k: integer;
begin
  result:=-1;

  SetLength (sp,length(Template));
  j:=0; sp[0]:=0;
  for i:=2 to length(Template) do begin
    inc (j);
    while j <> 0 do
      if Template[i] <> Template[j] then
        j:=sp[j-1]
        else break;
    sp[i]:=j;
    end;

  j:=1; k:=1;
  for i:=1 to length(Text) do
    if Text[i] = Template[j] then begin
      inc (j);
      if j = length(Template)+1 then begin
        result:=k;
        Break;
        end;
      end else begin
      k:=k+j-sp[j];
      j:=sp[j]+1;
      end;

  SetLength (sp,0);
end;

var List: TStrings;
   i: integer;
begin
 List:=TStringList.Create;
 List.LoadFromFile(ParamStr(1));
 i:=KMPPos(List.Text,ParamStr(2));
 if i = -1 then
   writeln ("not found")
   else
   writeln ("first entry in "+inttostr(i));
 List.Free;
end.


 
AlexWlad ©   (2005-11-19 11:37) [7]

Неплохая статья.

http://www.rsdn.ru/article/alg/textsearch.xml


 
TUser ©   (2005-11-19 11:41) [8]

На алголисте больше
http://algolist.manual.ru/search/esearch/index.php



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.045 c
1-1131624295
ASScef
2005-11-10 15:04
2005.12.11
Рисование на Canvas


4-1129004207
Zert
2005-10-11 08:16
2005.12.11
например в чужое окно можно записать значение, а как прочесть из


8-1115787018
carmen
2005-05-11 08:50
2005.12.11
информация о видео файле


3-1130058026
darklord
2005-10-23 13:00
2005.12.11
update тока одной записи


4-1129124861
Alex870
2005-10-12 17:47
2005.12.11
Описание службы




   Наверх