Текущий архив: 2006.06.11;
Скачать: CL | DM;
Вниз
Пойск похожех слов по файлу (Как в DELPHI по CTRL+SPACE) Найти похожие ветки
← →
Arazel © (2006-05-15 05:59) [0]Может кто делал такое?
Файл может быть размером 5mb или выше...
← →
Dstr © (2006-05-15 10:44) [1]Я ету функцию уже писал на форуме:
procedure StrBreakApart(const S, Delimeter: string; Parts: TStrings);
//S - ето где искать Delimeter - разделитель,в твоем случае " " Parts - будут все слова по отдельности
var
CurPos: integer;
CurStr: string;
begin
Parts.clear;
Parts.BeginUpdate();
try
CurStr := S;
repeat
CurPos := Pos(Delimeter, CurStr);
if (CurPos > 0) then
begin
Parts.Add(Copy(CurStr, 1, Pred(CurPos)));
CurStr := Copy(CurStr, CurPos + Length(Delimeter),
Length(CurStr) - CurPos - Length(Delimeter) + 1);
end
else
Parts.Add(CurStr);
until CurPos = 0;
finally
Parts.EndUpdate();
end;
end;
← →
Игорь Шевченко © (2006-05-15 10:51) [2]Dstr © (15.05.06 10:44) [1]
Иногда неплохо указывать авторство.
← →
TUser © (2006-05-15 12:32) [3]Большую базу надо предварительно хешировать.
Из быстрых алгоритмов поиска короткого слова свпоминается Сдвиг-Или.
← →
Sha © (2006-05-15 13:52) [4]> Dstr © (15.05.06 10:44) [1]
Про PosEx слышал?
← →
Dstr © (2006-05-15 19:58) [5]Нет
← →
Arazel © (2006-05-16 07:07) [6]мне нужно вот такую ф-цию только быструю
{
*****************************************************
>> Алфавитный пойск
Зависимости: Variants
Автор: Arazel
Copyright: Arazel (Nurzhanov Askar)
Дата: 16 мая 2006 г.
***************************************************** }
Function AlfavitFind(S:String; WordsList:TStrings; FindWords:TStrings):String;
Var
i,SLen:Cardinal;
Begin
if ((S = " ") or (S = "")) and (WordsList.Count <> 0) then Exit;
SLen:=Length(S);
For i:=0 to WordsList.Count-1 do
Begin
if UpperCase(Copy(S,1,SLen)) = UpperCase(Copy(WordsList[i],1,SLen)) Then
FindWords.Add(WordsList[i]);
end;
end;
← →
DelphiN! © (2006-05-16 07:26) [7]
> [6] Arazel © (16.05.06 07:07)
Вместо UpperCase можно использовать LCmpStrI. Она производит сравнение строк без учета регистра, быстрее чем это делаете вы
← →
DelphiN! © (2006-05-16 07:33) [8]
> [5] Dstr © (15.05.06 19:58)
Включена в модуль StrUtils версии Делфи 7 и выше.
Function PosEx(Const SubStr, S: String; Offset: Cardinal = 1): Integer;
var
I,X: Integer;
Len, LenSubStr: Integer;
begin
If Offset = 1 Then
Result := Pos(SubStr, S)
Else
begin
I := Offset;
LenSubStr := Length(SubStr);
Len := Length(S) - LenSubStr + 1;
While I <= Len Do
begin
If S[I] = SubStr[1] Then
begin
X := 1;
While (X < LenSubStr) And (S[I + X] = SubStr[X + 1]) Do
Inc(X);
If (X = LenSubStr) Then
begin
Result := I;
Exit;
End;
End;
Inc(I);
End;
Result := 0;
End;
End;
← →
TUser © (2006-05-16 08:36) [9]> Вместо UpperCase можно использовать LCmpStrI. Она производит сравнение строк без учета регистра, быстрее
Меняйте алгоритм. Отсортируйте файл и используйте бинарный поиск.
Страницы: 1 вся ветка
Текущий архив: 2006.06.11;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.044 c