Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1148797337
ZV
2006-05-28 10:22
2006.06.11
Focus


2-1148292355
deltav1
2006-05-22 14:05
2006.06.11
ModalResult


2-1148142741
Мурзилка
2006-05-20 20:32
2006.06.11
1) Звук


2-1148321148
skandri
2006-05-22 22:05
2006.06.11
TWebBrowser


2-1148669632
NE$MO
2006-05-26 22:53
2006.06.11
Скины на дельфя