Вверх ↑
Разработчик
Ответов: 26305
Рейтинг: 2146
#1: 2010-04-21 00:44:30 ЛС | профиль | цитата
Вот что получилось


Add(MainForm,8227255,203,308)
{
Width=163
Height=157
Position=1
}
Add(InlineCode,11935733,385,245)
{
@Hint=#8:Standart|
WorkPoints=#5:doPos|
EventPoints=#5:onPos|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|21: onPos:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|28:procedure THiAsmClass.doPos;|5:begin|63: _hi_onEvent(onPos,PosEx('123s12','aasftassklddhs123s123s',3));|4:end;|0:|4:end.|
link(onPos,14267925:doText,[])
AddHint(34,-36,55,13,@Hint)
}
Add(For,10753889,336,245)
{
End=100000
@IsLib=True
link(onEvent,11935733:doPos,[])
link(onStop,3504164:doStop,[(380,258)(380,246)(275,246)(275,258)])
}
Add(For,4107591,336,308)
{
elink(10753889)
link(onEvent,5889051:doPos,[])
link(onStop,13453645:doStop,[(380,321)(380,309)(275,309)(275,321)])
}
Add(Button,14588975,203,245)
{
Left=5
Top=10
Caption="test"
link(onClick,14186092:doEvent1,[])
}
Add(Hub,14186092,252,245)
{
link(onEvent1,3504164:doStart,[])
link(onEvent2,13453645:doStart,[(276,258)(276,314)])
}
Add(TimeCounter,3504164,287,245)
{
link(onStart,10753889:doFor,[])
link(onStop,3014420:doText,[(326,258)(326,265)])
}
Add(TimeCounter,13453645,287,308)
{
link(onStart,4107591:doFor,[])
link(onStop,5385417:doText,[(327,321)(327,307)])
}
Add(Message,11704833,539,280)
{
}
Add(Edit,14267925,434,245)
{
Left=70
Top=10
}
Add(Edit,6078964,434,308)
{
Left=70
Top=35
}
Add(Edit,3014420,483,259)
{
Left=70
Top=70
Text="time1"
link(onChange,6782821:doWork1,[(527,265)])
}
Add(Edit,5385417,483,301)
{
Left=70
Top=95
Text="time2"
link(onChange,6782821:doWork3,[(527,307)])
}
Add(HubEx,6782821,523,280)
{
}
Add(InlineCode,5889051,385,308)
{
@Hint=#11:Boyer-Moore|
WorkPoints=#5:doPos|
EventPoints=#5:onPos|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|21: onPos:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|73:function PosEx2(const SubStr, S: string; Offset: Cardinal = 1): Integer;|4:type|36: TBMHTable = array[0..255] of byte;|3:var|22: Ps, lp, i : Integer;|17: BMT: TBMHTable;|5:begin|23: lp := Length(SubStr);|3: |33: FillChar(BMT, SizeOf(BMT), lp);|25: for i := lp downto 1 do|34: BMT[ord(SubStr[i])] := lp - i;|0:|24: Ps := Offset + lp - 1;|0:|14: Result := 0;|2: |26: while Ps <= Length(S) do|31: if SubStr[lp] <> S[Ps] then|32: Ps := Ps + BMT[ord(S[Ps])]|8: else|29: for i := lp downto 1 do|43: if SubStr[i] <> S[Ps - lp + i] then|13: begin|23: Ps := Ps + 1;|16: Break;|11: end|26: else if i = 1 then|13: begin|32: Result := Ps - lp + 1;|15: Exit;|12: end;|4:end;|0:|28:procedure THiAsmClass.doPos;|5:begin|64: _hi_onEvent(onPos,PosEx2('123s12','aasftassklddhs123s123s',3));|4:end;|0:|4:end.|
link(onPos,6078964:doText,[])
AddHint(51,46,75,13,@Hint)
}


На данный момент это считается наиболее быстрый универсальный алгоритм. Преимущество его начинает замечаться на длинах подстроки > 6 символов
карма: 22

0