Tad писал(а): И про скорость Если не считывать с Edit строку поиска, а как подсказал MAV сначала ее записать в память то скорость в 2 раза быстрей. И потом, если явно указать строку для поиска SearchInFile, скорость еще быстрей. Сравните: Add(MainForm,2953706,21,105) { Width=806 Height=564 link(onCreate,10876761:doFor,[(65,125)(65,157)(-6,157)(-6,188)]) } Add(SearchInFile,13847902,266,98) { FileName="SIF.txt" Point(onEnd) Point(NumStr) link(onSearch,9438959:doCompare,[]) link(onEnd,10172051:doStop,[(310,118)(310,187)(200,187)(200,111)]) } Add(Edit,3153334,350,42) { Left=15 Top=10 Width=270 Text="123" } Add(Button,1057631,154,98) { Left=15 Top=40 Caption="Search" link(onClick,10172051:doStart,[]) } Add(Memo,2741103,434,105) { Left=15 Top=75 Width=270 ScrollBars=2 link(Str,13847902:NumStr,[(440,93)(356,93)(356,142)(272,142)]) } Add(TimeCounter,10172051,210,98) { link(onStart,13847902:doSearch,[]) link(onStop,6042733:doText,[(253,111)(251,137)(253,153)]) } Add(Label,6042733,266,147) { Left=76 Top=41 } Add(If_else,9438959,350,105) { link(onTrue,2741103:doAdd,[]) link(Op2,3153334:Text,[(363,89)(356,89)]) } Add(Memory,6592151,399,301) { Point(Data) link(Data,3224100:Text,[(405,289)(356,289)(356,338)(307,338)]) } Add(PointHint,6903760,147,28) { Info=#10:Ваш пример| Transparent=0 VAlign=0 Width=337 Height=200 } Add(SearchInFile,3296384,266,357) { FileName="SIF.txt" Point(onEnd) Point(NumStr) link(onSearch,3074587:doCompare,[]) link(onEnd,2611087:doStop,[(310,377)(310,373)(142,373)(142,370)]) } Add(Edit,3224100,301,294) { Left=15 Top=220 Width=270 Text="123" } Add(Button,12129626,98,357) { Left=15 Top=250 Caption="Search" link(onClick,2611087:doStart,[]) } Add(Memo,6396029,434,364) { Left=15 Top=285 Width=270 ScrollBars=2 link(Str,3296384:NumStr,[(440,352)(356,352)(356,401)(272,401)]) } Add(TimeCounter,2611087,154,357) { link(onStart,10610625:doEvent1,[]) link(onStop,69595:doText,[(226,370)(226,412)]) } Add(Label,69595,266,406) { Left=76 Top=251 } Add(If_else,3074587,350,364) { link(onTrue,6396029:doAdd,[]) link(Op2,6592151:Value,[(363,348)(405,348)]) } Add(PointHint,4718897,77,273) { Info=#46:Пример с записью строки в память перед поиском| Transparent=0 VAlign=0 Width=407 Height=214 } Add(Hub,10610625,231,357) { link(onEvent1,6592151:doValue,[(322,363)(322,307)]) link(onEvent2,3296384:doSearch,[(255,370)(255,363)]) } Add(Memory,3160134,854,301) { Point(Data) link(Data,11224983:Text,[(860,289)(811,289)(811,338)(762,338)]) } Add(SearchInFile,11577702,721,357) { FileName="SIF.txt" Point(onEnd) Point(NumStr) link(onSearch,1468738:doCompare,[]) link(Text,16453743:Var1,[(734,341)]) link(onEnd,14981175:doStop,[(765,377)(765,373)(597,373)(597,370)]) } Add(Edit,11224983,756,294) { Left=335 Top=220 Width=270 Text="123" } Add(Button,7780723,553,357) { Left=335 Top=250 Caption="Search" link(onClick,14981175:doStart,[]) } Add(Memo,15550771,889,364) { Left=335 Top=285 Width=270 ScrollBars=2 link(Str,11577702:NumStr,[(895,352)(811,352)(811,401)(727,401)]) } Add(TimeCounter,14981175,609,357) { link(onStart,12706251:doEvent1,[]) link(onStop,3978398:doText,[(681,370)(681,412)]) } Add(Label,3978398,721,406) { Left=396 Top=251 } Add(If_else,1468738,805,364) { link(onTrue,15550771:doAdd,[]) link(Op2,16453743:Var2,[(818,348)(860,348)]) } Add(PointHint,606638,532,273) { Info=#42:Пример с явным указанием строки для поиска| Transparent=0 VAlign=0 Width=407 Height=200 } Add(Hub,12706251,686,357) { link(onEvent1,3160134:doValue,[(767,363)(767,307)]) link(onEvent2,11577702:doSearch,[(710,370)(710,363)]) } Add(GetDataEx,16453743,854,336) { link(Data,3160134:Value,[]) } Add(For,10876761,6,182) { End=200000 link(onEvent,3389893:doAdd,[(71,188)(71,153)]) link(onStop,3389893:doSave,[(71,195)(71,188)]) } Add(StrList,3389893,104,147) { FileName="SIF.txt" Strings=#3:123|3:321|6:123123|3:321|3:456| }
4 или 6.5 секунд для почти миллиона строк это не существенно. ИМХО. Когда данная процедура выполняется часто, любое ускорение процесса это хорошо
|