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

Вниз

Как БЫСТРО найти слово в текстовом файле   Найти похожие ветки 

 
Dimich1978 ©   (2003-09-04 15:47) [0]

как это делается медленно известно, хотелось бы узнать как это можно быстрее зделать.
Мне необходимо найти слово в тестовом файле и начать считывать информацию дальше по этой строке.
За все ответы благодарен.


 
Рамиль ©   (2003-09-04 15:57) [1]

А как медленно то?
Грузишь весь текст в строку и применяешь Pos


 
Кирилл   (2003-09-04 15:59) [2]

stroka:="......";
for i:=1 to (stlist1.Count -1) do
begin
if Pos(stroka,stlist1[i]) = 0 then
..................


 
Vovchik_A ©   (2003-09-04 16:03) [3]

Медленно это как ? давай мух с котелтами разделим, а ?


 
Vorobyev Sergey   (2003-09-04 16:16) [4]

Быстро это так...

Создаешь индексный файл, где проиндексируешь все слова с номерами их позиций..
При поиске находишь слово в этом файле (это быстро), и по соответствующему номеру позиции переходишь в исходном тексте..
Приблизительно так работают поисковики в интернете..

Тоже поисковик пишешь?


 
Рамиль ©   (2003-09-04 16:22) [5]


> stroka:="......";
> for i:=1 to (stlist1.Count -1) do
> begin
> if Pos(stroka,stlist1[i]) = 0 then

Тогда уж Pos(stroka, strlist1.Text)


 
[lamer]Barmaglot ©   (2003-09-04 16:43) [6]

FAQ?
http://delphibase.endimus.com/?action=viewfunc&topic=strsearch&id=1039 4


 
Serginio666   (2003-09-04 17:45) [7]

Метод Боуера Мура Хар....

unit BM;

interface
Uses SysUtils;
Type
TCharArray= array[ #0..#255] of byte;
TArrUpperChar = array[ #0..#255] of Char;

Procedure FillArray(Var arr:TCharArray; Var st:String);
Function BMFinde(Const st,SourseStr:String;Var arr:TCharArray;m:integer):Integer;OverLoad;
Function BMFinde(Const st:String;SourseStr:Pointer;Var arr:TCharArray;m,n:integer):Integer;OverLoad;
var
ArrUpperChar:TArrUpperChar;
implementation
Var Sch:Char;
Type
PLongArray=^TLongArray;
TLongArray= array[1..2000000000] of Char;
Procedure FillArray(Var arr:TCharArray; Var st:String);
Var J:Integer;
len:Byte;
Begin
len:=Length(st);
FillChar(arr[ #0],256,Len);
st:=AnsiUpperCase(st);
For J:=1 to Len-1 Do
Begin
arr[st[J]]:=Len - j ;
end;
end;
Function BMFinde(Const st,SourseStr:String;Var arr:TCharArray;m:integer):Integer;
Var a, i, j,n,Shift:Integer;
Ch,LastChar:Char;
Begin
result:=0;
i:= m;
LastChar:=st[m];
n:=Length(SourseStr);
while i <=n Do
Begin
Ch:=ArrUpperChar[SourseStr[i]];
if Ch=LastChar Then
Begin
j:=1;
//if CompareMem(@SourseStr[i],@St[1], m-1) Then
While (j<m) and (ArrUpperChar[SourseStr[i-j]]=st[m-j]) Do inc(j);
If j=m Then
begin
result:=i;
Exit
end;
end;
Inc(i,arr[Ch]);
end;
end;
//-------------------------------------------------------------------- ----
Function BMFinde(Const st:String;SourseStr:Pointer;Var arr:TCharArray;m,n:integer):Integer;OverLoad;
Var a, i, j,Shift:Integer;
Ch,LastChar:Char;
Begin
result:=0;
i:= m;
LastChar:=st[m];
while i <=n Do
Begin
Ch:=ArrUpperChar[PLongArray(SourseStr)^[i]];
if Ch=LastChar Then
Begin
j:=1;
//if CompareMem(@SourseStr[i],@St[1], m-1) Then
While (j<m) and (ArrUpperChar[PLongArray(SourseStr)^[i-j]]=st[m-j]) Do inc(j);
If j=m Then
begin
result:=i;
Exit
end;
end;
Inc(i,arr[Ch]);
end;
end;
//-------------------------------------------------------------------- -----
initialization
For Sch:=#0 To #255 Do
ArrUpperChar[Sch]:=AnsiUpperCase(sch)[1];
end.


 
Polevi ©   (2003-09-04 18:37) [8]

+ Memory Mapped File



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

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

Наверх




Память: 0.48 MB
Время: 0.019 c
7-58937
Spawn
2003-07-05 12:01
2003.09.18
Изучаю PE заголовок...


1-58766
Vlad25
2003-09-05 14:24
2003.09.18
Иконки для кнопок


7-58930
Spawn
2003-07-05 15:55
2003.09.18
Повторение данных в IMAGE_DIRECTORY_ENTRY_IMPORT


1-58664
AlexandrKu
2003-09-05 07:21
2003.09.18
Отчет в MS Word


3-58531
vovan
2003-08-28 11:08
2003.09.18
Halcyon+Добавлние полей