DRc писал(а):
Третий вариант снизу.Да, я видел этот вариант у Tad.
Плохо что работа с диском, а поиск всех вхождений со скоростью ArrayFind это конечно плюс.
Как я понимаю, предел скорости достигнут.
------------ Дoбавленo в 13.43:
Еще один вариант. Вариант 4.
Компонент Position, и ищем в Memory.
Это подходит для моих строк, я могу примерно рассчитать длину каждой строки.
Так же хотелось бы добавить BlockFind верхнюю точку Position, все стало бы проще.
Add(ArrayEnum,10816952,322,154)
{
link(onItem,7251812:doWork2,[])
link(onEndEnum,6294994:doEvent1,[])
link(Array,6260188:Array,[])
}
Add(MainForm,1579138,91,112)
{
Width=655
Height=766
link(onCreate,1565852:doFor,[])
}
Add(StrList,11935250,693,154)
{
FileName="spisok.txt"
Point(doGetString)
Point(onGetString)
}
Add(Edit,5998970,777,84)
{
Left=10
Top=175
Width=430
Text="Муфта переход. 1 1/4" - 1/2" SМшт45.442014-12-03 09:56:21"
}
Add(Button,1898356,399,238)
{
Left=10
Top=140
Caption="Search"
Data=Integer(0)
link(onClick,8663686:doStart,[])
}
Add(ArrayEnum,3008004,707,238)
{
link(onItem,16076296:doCompare,[])
link(onEndEnum,5311411:doEvent1,[(769,251)(769,279)])
link(Array,13286750:Var2,[])
}
Add(TimeCounter,8663686,511,238)
{
link(onStart,3008004:doEnum,[])
link(onStop,10799305:doText,[(569,251)(569,272)])
}
Add(Label,10799305,595,266)
{
Left=97
Top=142
}
Add(StrMask,16076296,917,238)
{
Point(doMask)
link(onTrue,5588019:doAdd,[])
}
Add(FormatStr,8161445,868,161)
{
DataCount=1
Mask="*%1*"
link(onFString,16076296:doMask,[(908,167)(908,251)])
link(Str1,594595:Var3,[(874,138)])
}
Add(Button,10304679,427,434)
{
Left=10
Top=240
Caption="Search"
Data=Integer(0)
link(onClick,4681328:doEvent1,[])
}
Add(Memo,12998003,1029,455)
{
Left=180
Top=215
Width=255
Height=125
ScrollBars=2
}
Add(TimeCounter,3104725,532,448)
{
link(onStart,1124591:doFind,[])
link(onStop,5230228:doText,[(618,461)(618,503)])
}
Add(Label,5230228,714,497)
{
Left=102
Top=247
}
Add(Hub,4681328,483,434)
{
OutCount=4
link(onEvent2,12998003:doClear,[(898,447)(898,468)])
link(onEvent3,3104725:doStart,[])
link(onEvent4,3104725:doStop,[])
}
Add(ArrayFind,1124591,742,448)
{
Partial=0
link(onFind,15810251:doCompare,[])
link(Array,7334526:Var2,[])
link(Index,3034059:Value,[])
link(Value,2761752:Var2,[(762,320)(783,320)])
}
Add(GetDataEx,13286750,707,217)
{
link(Data,11935250:Array,[])
}
Add(If_else,15810251,798,448)
{
Op2=Integer(-1)
link(onFalse,14604591:doRead,[])
}
Add(ArrayRW,14604591,875,455)
{
link(onRead,12998003:doAdd,[])
link(Array,7334526:Var3,[(881,411)])
}
Add(GetDataEx,7334526,742,406)
{
link(Data,13286750:Var3,[(748,222)])
}
Add(Memory,3034059,749,350)
{
Default=Integer(0)
}
Add(Memory,16071924,777,161)
{
Point(Data)
link(onData,748166:doLength,[])
link(Data,594595:Var2,[])
}
Add(Hub,5311411,798,273)
{
OutCount=3
link(onEvent1,8663686:doStop,[(820,279)(820,317)(499,317)(499,251)])
link(onEvent2,12825736:doData,[(889,286)(889,335)])
link(onEvent3,5588019:doClear,[(901,293)(901,258)])
}
Add(Memo,8927946,1064,308)
{
Left=185
Top=10
Width=255
Height=150
ScrollBars=2
}
Add(StrList,5588019,1001,245)
{
}
Add(DoData,12825736,1001,329)
{
link(onEventData,8927946:doText,[])
link(Data,5588019:Text,[])
}
Add(StrList,1275019,252,49)
{
Strings=#136:900001-234563Резьба оцинкованная 20 /200шт Резьба оцинкованная 20 /200шт5.852014-05-05 09:55:305.856.902713532014-05-05 09:55:30|137:900001-234563Резьба оцинкованная 20 /200шт Резьба оцинкованная 20 /200шт5.712014-12-03 09:56:215.716.7411163302014-12-03 09:56:21|163:900001-652403Тройник для мет.пл.тр 26*20*26" Ц/Ц/Цшт Тройник для мет.пл.тр 26*20*26" Ц/Ц/Цшт127.692014-12-03 09:56:21127.69150.6811159932014-12-03 09:56:21|241:900001-651909Сифон Ани для душевого поддона 1 1/2"*90, h90 с переливом 45 40*50 хром /20/шт Сифон Ани для душевого поддона 1 1/2"*90, h90 с переливом 45 40*50 хром /20/шт220.342014-12-03 09:56:21220.34260.0011154992014-12-03 09:56:21|195:900001-652096Смеситель G-LAUF для кухни шар. 40мм на гайке 4G-4169шт Смеситель G-LAUF для кухни шар. 40мм на гайке 4G-4169шт551.082014-12-03 09:56:21551.08650.2711156862014-12-03 09:56:21|196:900001-652258Смеситель для ванны-душа, керам., коротк. излив, Ecoшт Смеситель для ванны-душа, керам., коротк. излив, Ecoшт2285.472014-12-03 09:56:212285.472696.8511158482014-12-03 09:56:21|179:900001-652316Трап 110 гор.вып. рег., металл. реш.15*15 /6/шт Трап 110 гор.вып. рег., металл. реш.15*15 /6/шт443.372014-12-03 09:56:21443.37523.1811159062014-12-03 09:56:21|123:900001-652344Тройник 1" хром Gшт Тройник 1" хром Gшт116.252014-12-03 09:56:21116.25137.1711159342014-12-03 09:56:21|290:900001-652123Смеситель Frap ван., керам., дл. излив S350 mm, POLLMNлюкс(латунь), лейка 1 режим, хром G2245^7130Sшт Смеситель Frap ван., керам., дл. излив S350 mm, POLLMNлюкс(латунь), лейка 1 режим, хром G2245^7130Sшт1240.952014-12-03 09:56:211240.951464.3211157132014-12-03 09:56:21|185:900001-651438Отвод 50 угол 67 для внутр.кан. (г.Красноярск) /35/шт Отвод 50 угол 67 для внутр.кан. (г.Красноярск) /35/шт102014-12-03 09:56:2110.0011.8011150282014-12-03 09:56:21|0:|
Point(doGetString)
Point(onGetString)
}
Add(For,1565852,154,126)
{
End=1000
link(onEvent,8533446:doEnum,[])
link(onStop,10816952:doEnum,[(203,139)(203,160)])
}
Add(StrList,6260188,308,49)
{
Strings=#148:900001-651346Муфта переход. 1 1/4" - 1/2" SМшт Муфта переход. 1 1/4" - 1/2" SМшт45.442014-12-03 09:56:2145.4453.6211149362014-12-03 09:56:21|210:900001-651735Прокладка сантех резина Ду 74*94 круглая под смыв.бачок /200шт/шт Прокладка сантех резина Ду 74*94 круглая под смыв.бачок /200шт/шт8.782014-12-03 09:56:218.7810.3611153252014-12-03 09:56:21|148:900001-651346Муфта переход. 1 1/4" - 1/2" SМшт Муфта переход. 1 1/4" - 1/2" SМшт45.442014-12-03 09:56:2145.4453.6211149362014-12-03 09:56:21|210:900001-651735Прокладка сантех резина Ду 74*94 круглая под смыв.бачок /200шт/шт Прокладка сантех резина Ду 74*94 круглая под смыв.бачок /200шт/шт8.782014-12-03 09:56:218.7810.3611153252014-12-03 09:56:21|
Point(doGetString)
Point(onGetString)
}
Add(HubEx,7251812,432,154)
{
link(onEvent,11935250:doAdd,[])
}
Add(ArrayEnum,8527459,497,70)
{
}
Add(ArrayEnum,8533446,266,126)
{
link(onItem,7251812:doWork1,[(436,132)])
link(Array,1275019:Array,[])
}
Add(Edit,180565,840,364)
{
Left=490
Top=250
Width=95
}
Add(DoData,4603611,700,371)
{
link(onEventData,180565:doText2,[])
link(Data,11935250:Count,[])
}
Add(StrList,15665462,1400,385)
{
}
Add(Button,5367531,1050,378)
{
Left=10
Top=355
Caption="Search"
Data=Integer(0)
link(onClick,153000:doEvent1,[])
}
Add(TimeCounter,2402154,1155,392)
{
link(onStart,11090039:doSearch,[(1241,398)(1241,370)])
link(onStop,13068211:doText,[(1241,405)(1241,447)])
}
Add(Hub,153000,1106,378)
{
OutCount=4
link(onEvent2,15665462:doClear,[(1260,391)(1260,398)])
link(onEvent3,2402154:doStart,[])
}
Add(Label,13068211,1295,441)
{
Left=102
Top=362
}
Add(SearchInFile,11090039,1295,364)
{
FileName="spisok.txt"
Sensitive=1
Point(String)
Point(onEnd)
link(onSearch,15665462:doAdd,[(1363,377)(1363,391)])
link(Text,7935619:Var2,[(1308,352)(972,352)(972,561)(678,561)])
link(onEnd,3939390:doEvent1,[(1346,384)(1346,447)])
}
Add(GetDataEx,2761752,777,287)
{
link(Data,16071924:Value,[])
}
Add(Hub,6294994,511,161)
{
OutCount=4
link(onEvent1,4603611:doData,[(538,167)(538,377)])
link(onEvent2,11935250:doSave,[(588,174)(588,195)])
link(onEvent3,7545657:doValue,[(571,181)(571,104)])
link(onEvent4,16071924:doValue,[(651,188)(651,167)])
}
Add(DoData,9341557,1400,455)
{
link(onEventData,12549506:doAdd,[(1440,461)(1440,391)])
link(Data,15665462:Text,[])
}
Add(Hub,3939390,1365,441)
{
OutCount=3
link(onEvent1,2402154:doStop,[(1391,447)(1391,426)(1143,426)(1143,405)])
link(onEvent2,12549506:doClear,[(1414,454)(1414,398)])
link(onEvent3,9341557:doData,[])
}
Add(Memo,12549506,1449,385)
{
Left=180
Top=365
Width=255
Height=125
ScrollBars=2
}
Add(Position,11407394,532,630)
{
ZeroPos=0
Point(doReset)
link(onSearch,10260637:doCompare,[])
link(Str,5962527:Var2,[])
link(Target,7935619:Var1,[(545,551)])
}
Add(StrList,5382399,991,677)
{
}
Add(Button,6800550,291,677)
{
Left=10
Top=505
Caption="Search"
Data=Integer(0)
link(onClick,1499322:doEvent1,[])
}
Add(TimeCounter,11742731,396,691)
{
link(onStart,2104991:doWork2,[(480,697)(480,636)])
link(onStop,10969254:doText,[(482,704)(482,739)])
}
Add(Hub,1499322,347,677)
{
OutCount=4
link(onEvent2,5382399:doClear,[])
link(onEvent3,11742731:doStart,[])
}
Add(Label,10969254,536,733)
{
Left=102
Top=512
}
Add(DoData,9038010,991,747)
{
link(onEventData,14577683:doAdd,[(1053,753)(1053,739)])
link(Data,5382399:Text,[])
}
Add(Hub,14642835,949,733)
{
OutCount=5
link(onEvent1,11742731:doStop,[(975,739)(975,721)(384,721)(384,704)])
link(onEvent2,14577683:doClear,[])
link(onEvent3,9038010:doData,[])
}
Add(Memo,14577683,1082,733)
{
Left=180
Top=515
Width=255
Height=125
ScrollBars=2
}
Add(Memory,7545657,616,98)
{
Point(Data)
link(Data,11935250:Text,[(622,86)(640,86)(640,218)(699,218)])
}
Add(GetDataEx,7935619,672,546)
{
link(Data,2761752:Var1,[(678,292)])
}
Add(If_else,10260637,581,630)
{
Op2=Integer(0)
link(onFalse,1212223:doCalc,[])
}
Add(HubEx,2104991,504,630)
{
link(onEvent,11407394:doSearch,[])
}
Add(Hub,16755865,777,637)
{
link(onEvent1,10977735:doCopy,[])
link(onEvent2,2104991:doWork3,[(803,650)(803,674)(508,674)])
}
Add(Copy,10977735,812,637)
{
link(onCopy,2539464:doSearch,[])
link(Str,5962527:Var3,[(818,607)])
link(Position,1212223:Result,[(825,625)(748,625)(748,681)(671,681)])
link(Count,681832:Result,[(832,620)(763,620)(763,677)(720,677)])
}
Add(GetDataEx,5962527,532,602)
{
link(Data,7545657:Value,[(538,366)(622,366)])
}
Add(GetDataEx,594595,777,133)
{
link(Data,5998970:Text,[])
}
Add(Length,748166,819,161)
{
link(onLength,8161445:doString,[])
link(Str,594595:Var1,[(825,149)(774,149)(774,138)])
}
Add(BlockFind,2539464,882,637)
{
IncludeBlock=1
StartBlock="
"
EndBlock="
"
link(onSearch,5382399:doAdd,[(952,643)(952,683)])
link(onEndSearch,14642835:doEvent1,[(932,650)(932,739)])
}
Add(FastMathParse,681832,714,637)
{
DataCount=3
MathStr="%1 + (%2*2) - %3"
ResultType=0
link(onResult,16755865:doEvent1,[])
link(X1,11407394:Position,[(720,625)(629,625)(629,674)(538,674)])
link(X2,14024403:Var2,[])
}
Add(FastMathParse,1212223,665,637)
{
MathStr="%1 - %2"
ResultType=0
link(onResult,681832:doCalc,[])
link(X2,14024403:Var1,[(678,579)])
}
Add(GetDataEx,14024403,721,574)
{
Angle=1
link(Data,748166:Result,[(825,579)])
}
Add(InfoTip,2993960,248,588)
{
Info=#9:Вариант 4|
Font=[MS Sans Serif,8,0,255,1]
Frame=3
Width=953
Height=207
Margin=5
}
------------ Дoбавленo в 14.17:
А на 1000000 строк в 10 раз быстрее.
https://cloud.mail.ru/public/96fd20ced98f/serch.jpg