Форум: "Основная";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];
ВнизКак БЫСТРО найти слово в текстовом файле Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c