Make(delphi) ver(4.04 build 184) P.S: у меня результаты таковы: time1 =0 Add(MainForm,1842996,174,70) { Width=313 Height=521 Caption="Т Е С Т" BorderStyle=1 Position=1 link(onCreate,14336781:doLoad,[]) } Add(Button,14588975,133,168) { Left=120 Top=445 Font=[MS Sans Serif,10,1,0,1] Caption="start" Point(doVisible) link(onClick,14186092:doEvent1,[]) } Add(Hub,14186092,189,168) { OutCount=12 link(onEvent1,4047973:doWork1,[(215,174)(215,162)(72,162)(72,174)]) link(onEvent3,3504164:doStart,[]) link(onEvent4,3504164:doStop,[]) link(onEvent5,13453645:doStart,[(276,202)(276,251)]) link(onEvent6,13453645:doStop,[(266,209)(266,258)]) link(onEvent7,9381213:doStart,[(259,216)(259,342)]) link(onEvent8,9381213:doStop,[(252,223)(252,349)]) link(onEvent9,2253792:doStart,[(252,230)(252,447)]) link(onEvent10,2253792:doStop,[(252,237)(252,454)]) link(onEvent11,11792014:doWork2,[(385,244)(385,230)]) link(onEvent12,4047973:doWork2,[(215,251)(215,281)(69,281)(69,181)]) } Add(ChanelToIndex,4047973,84,168) { link(onIndex,14588975:doVisible,[]) } Add(InlineCode,16698845,469,245) { @Hint=#2:My| WorkPoints=#5:doPos| EventPoints=#5:onPos| DataPoints=#4:text|6:sbtext| 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|34: onPos,text, sbtext:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|0:|28:procedure THiAsmClass.doPos;|19:var sst, sb:string;|74:function PosEx2(const SubStr, S: string; Offset: Cardinal = 1): Integer;|15:var str:string;|5:begin|32: If offset=0 then offset := 1;|43: Result := pos(substr,CopyEnd(s,offset));|50: If Result>0 then Result := Result + offset - 1;|4:end;|0:|5:begin|37: Sb := ReadString(_Data,sbtext,'');|36: Sst := ReadString(_Data,text,'');|38: _hi_onEvent(onPos,PosEx2(sb,sst,3));|4:end;|0:|4:end.| link(onPos,3885940:doValue,[]) link(text,4595845:Var3,[(475,117)]) link(sbtext,11776825:Var2,[]) AddHint(-53,37,29,13,@Hint) } Add(TimeCounter,13453645,287,245) { link(onStart,16698845:doPos,[]) link(onStop,5122439:doString,[(369,258)(369,300)]) } Add(InlineCode,11935733,413,140) { @Hint=#8:Standart| WorkPoints=#5:doPos| EventPoints=#5:onPos| DataPoints=#4:text|6:sbtext| 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|33: onPos,text,sbtext:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|28:procedure THiAsmClass.doPos;|18:var str,sb:string;|5:begin|37: Sb := ReadString(_Data,sbtext,'');|36: Str := ReadString(_Data,text,'');|37: _hi_onEvent(onPos,PosEx(sb,str,3));|4:end;|0:|4:end.| link(onPos,13511373:doValue,[]) link(text,4595845:Var2,[]) link(sbtext,11776825:Var1,[(426,124)]) AddHint(-27,37,55,13,@Hint) } Add(TimeCounter,3504164,287,182) { link(onStart,11935733:doPos,[(370,188)(370,146)]) link(onStop,3738199:doString,[]) } Add(StrList,14336781,413,56) { FileName="www.txt" Strings=#7:www.txt| } Add(GetDataEx,4595845,413,112) { link(Data,14336781:Text,[]) } Add(Label,6298121,476,63) { Left=5 Top=50 Width=299 Height=17 Font=[MS Sans Serif,8,0,255,1] Caption="("Шевченко","пер","66000008000017900","624350","6615"" } Add(Label,7440477,518,63) { Left=10 Top=30 Width=35 Height=17 Caption="Ищем" } Add(Label,12326515,364,56) { Left=20 Top=5 Width=279 Height=24 Font=[MS Sans Serif,12,1,0,1] Caption="Размер строки 81 437 774 байта" } Add(TimeCounter,9381213,287,336) { link(onStart,5889051:doPos,[]) link(onStop,13825338:doString,[(343,349)(343,391)]) } Add(InlineCode,5889051,371,336) { @Hint=#11:Boyer-Moore| WorkPoints=#5:doPos| EventPoints=#5:onPos| DataPoints=#4:text|6:sbtext| 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|33: onPos,text,sbtext:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|72:function PosEx2(const SubStr, S: string; Offset: cardinal = 1): Integer;|3:var|22: Ps, lp, i : Integer;|33: BMT: array[0..255] of cardinal;|5:begin|23: lp := Length(SubStr);|1: |22: for i := 0 to 255 do|19: BMT[i] := lp; |25: for i := lp downto 1 do|36: if BMT[ord(SubStr[i])] = lp then|36: BMT[ord(SubStr[i])] := lp - i;|0:|24: Ps := Offset + lp - 1;|0:|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;|14: Result := 0;|4:end;|0:|28:procedure THiAsmClass.doPos;|18:var sst,sb:string;|5:begin|37: Sb := ReadString(_Data,sbtext,'');|36: Sst := ReadString(_Data,text,'');|38: _hi_onEvent(onPos,PosEx2(sb,sst,3));|4:end;|0:|4:end.| link(onPos,15035540:doValue,[]) link(text,10219259:Var2,[]) link(sbtext,10171368:Var1,[(384,320)]) AddHint(41,36,75,13,@Hint) } Add(GetDataEx,11776825,476,119) { link(Data,6298121:Caption,[]) } Add(Memory,13511373,525,140) { } Add(StringTable,13226389,588,294) { Left=15 Top=80 Width=270 Height=350 Columns=#3:Имя|7:Позиция|10:Время в Мс| Grid=0 } Add(Memory,3885940,525,245) { } Add(Memory,15035540,525,336) { } Add(HubEx,15544549,567,294) { link(onEvent,13226389:doAdd,[]) } Add(FormatStr,3738199,525,189) { Mask="Штатный;%1;%2" link(onFString,11792014:doWork1,[(571,195)]) link(Str1,13511373:Value,[]) } Add(FormatStr,5122439,525,294) { Mask="Мой;%1;%2" link(onFString,15544549:doWork2,[]) link(Str1,3885940:Value,[]) } Add(FormatStr,13825338,525,385) { Mask="Nesco;%1;%2" link(onFString,16377225:doWork3,[(571,391)]) link(Str1,15035540:Value,[]) } Add(HubEx,11792014,567,224) { Angle=1 link(onEvent,15544549:doWork1,[]) } Add(InlineCode,6506667,455,441) { @Hint=#14:NewPosEx (Asm)| WorkPoints=#5:doPos| EventPoints=#5:onPos| DataPoints=#4:text|5:sbstr| 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|16: text,sbstr,|21: onPos:THI_Event;|5: |50: procedure doPos(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|71:function PosEx2(const S, SubStr: string; Offset: integer = 1): integer;|3:asm|16: PUSH EDI|16: PUSH ESI|16: PUSH EBX|16: PUSH EAX|18: OR EAX,EAX|14: JE @@2|18: OR EDX,EDX|14: JE @@2|15: DEC ECX|14: JS @@2|23: MOV EBX,[EAX-4]|19: SUB EBX,ECX|15: JLE @@2|23: SUB EBX,[EDX-4]|14: JL @@2|15: INC EBX|19: ADD EAX,ECX|19: MOV ECX,EBX|23: MOV EBX,[EDX-4]|15: DEC EBX|19: MOV EDI,EAX|0:|19:@@1: MOV ESI,EDX|13: LODSB|19: REPNE SCASB|15: JNE @@2|19: MOV EAX,ECX|16: PUSH EDI|19: MOV ECX,EBX|18: REPE CMPSB|15: POP EDI|19: MOV ECX,EAX|15: JNE @@1|23: LEA EAX,[EDI-1]|15: POP EDX|19: SUB EAX,EDX|15: INC EAX|15: JMP @@3|0:|15:@@2: POP EAX|19: XOR EAX,EAX|8: |15:@@3: POP EBX|15: POP ESI|15: POP EDI|4:end;|0:|28:procedure THiAsmClass.doPos;|18:var str,sb:string;|5:begin|36: Sb := ReadString(_Data,sbstr,'');|36: Str := ReadString(_Data,text,'');|37: _hi_onEvent(onPos,PosEx2(str,sb,3));|4:end;|0:|4:end.| link(onPos,2712982:doValue,[]) link(text,10219259:Var3,[(461,306)]) link(sbstr,10171368:Var2,[]) AddHint(-79,57,96,13,@Hint) } Add(Memory,2712982,532,441) { } Add(FormatStr,8643970,532,490) { Mask="NewPosEx;%1;%2" link(onFString,16377225:doWork1,[(581,496)(581,335)]) link(Str1,2712982:Value,[]) } Add(TimeCounter,2253792,301,441) { link(onStart,6506667:doPos,[]) link(onStop,8643970:doString,[(433,454)(433,496)]) } Add(HubEx,16377225,567,329) { Angle=3 link(onEvent,15544549:doWork3,[]) } Add(GetDataEx,10219259,371,301) { link(Data,4595845:Var1,[(377,117)]) } Add(GetDataEx,10171368,462,315) { Angle=1 link(Data,11776825:Var3,[(509,320)(509,124)]) }