Вверх ↑
Разработчик
Ответов: 26303
Рейтинг: 2146
#1: 2009-10-30 23:58:46 ЛС | профиль | цитата
Да, еще чего подумал -- парсить файл лога -- это хорошо, а не проще мониторить этот файл на ходу, читать добавку и распихивать данные на ходу в каждодневную базу. Я бы так и сделал
------------ Дoбавленo в 23.59:
Tad, слабое быстродействие прямого кода, меня настораживает
------------ Дoбавленo в 00.13:
Проверил обе схемы на этом же файле при отключенном контроле вывода. Прирост схемы Tad-a очень незначительный 24 мсек против моих 26 мсек

Тестовые схемы:

Моя



Add(MainForm,94467,399,378)
{
Width=750
Height=299
Caption=""
}
Add(Button,4481738,168,175)
{
Left=20
Top=235
link(onClick,1555007:doStart,[])
}
Add(Thread,1555007,224,175)
{
Delay=0
FastStop=0
link(onExec,13019582:doEvent1,[])
}
Add(Hub,5019261,280,287)
{
OutCount=5
link(onEvent1,6468069:doOff,[(324,293)(324,349)])
link(onEvent2,15640483:doStart,[(310,300)(310,377)])
link(onEvent3,344370:doConvert,[])
link(onEvent4,15640483:doStop,[(303,314)(303,384)])
link(onEvent5,6468069:doOn,[(318,321)(318,356)])
}
Add(LED,6468069,343,336)
{
Left=615
Top=235
Width=115
Height=20
Shape=1
}
Add(TimeCounter,15640483,343,371)
{
link(onStop,94467:doCaption,[])
}
Add(SharedStream,9929879,343,196)
{
FileName="log1.txt"
CoreName="Log"
PageMem=1600
Point(Position)
link(onOpen,5019261:doEvent1,[(387,202)(387,248)(268,248)(268,293)])
}
Add(Convertor,344370,343,301)
{
Mode=11
link(onResult,10513845:doEvent1,[])
link(Data,9929879:Stream,[])
}
Add(StrList,2597292,476,217)
{
Point(doGetString)
Point(onGetString)
}
Add(Edit,11092326,546,350)
{
Left=155
Top=235
Width=130
Text="serial"
}
Add(Hub,13019582,280,175)
{
OutCount=3
link(onEvent1,9209952:doClear,[(677,181)(677,321)])
link(onEvent2,2279432:doData,[(460,188)(460,405)])
link(onEvent3,9929879:doOpen,[(318,195)(318,202)])
}
Add(ArrayEnum,16021318,490,308)
{
link(onItem,2886579:doSearch,[])
link(Array,2597292:Array,[])
}
Add(Hub,10513845,406,301)
{
link(onEvent1,2597292:doText,[(439,307)(439,244)])
link(onEvent2,16021318:doEnum,[])
}
Add(BlockFind,2886579,630,308)
{
EndBlock=":"
Point(doStartBlock)
link(onSearch,9209952:doAdd,[])
}
Add(DoData,2279432,546,399)
{
link(onEventData,2886579:doStartBlock,[(589,405)(589,321)])
link(Data,11092326:Text,[])
}
Add(ListBox,9209952,693,308)
{
Left=10
Top=10
Width=720
Height=215
link(Str,16021318:Item,[(699,294)(534,294)(534,352)(496,352)])
}


Приведенная Tad-a



Add(MainForm,94467,343,322)
{
Width=750
Height=299
Caption=""
}
Add(Button,4481738,126,224)
{
Left=20
Top=235
link(onClick,1555007:doStart,[])
}
Add(Thread,1555007,175,224)
{
Delay=0
FastStop=0
link(onExec,5019261:doEvent1,[])
}
Add(Hub,5019261,224,224)
{
OutCount=6
link(onEvent1,9209952:doClear,[(400,230)(400,258)])
link(onEvent2,6468069:doOff,[(268,237)(268,293)])
link(onEvent3,15640483:doStart,[(261,244)(261,321)])
link(onEvent4,3918115:dosearch,[])
link(onEvent5,15640483:doStop,[(253,258)(253,328)])
link(onEvent6,6468069:doOn,[(247,265)(247,300)])
}
Add(LED,6468069,287,280)
{
Left=615
Top=235
Width=115
Height=20
Shape=1
}
Add(TimeCounter,15640483,287,315)
{
link(onStop,94467:doCaption,[])
}
Add(Edit,11092326,343,182)
{
Left=155
Top=235
Width=130
Text="serial"
}
Add(ListBox,9209952,427,245)
{
Left=10
Top=10
Width=720
Height=215
}
Add(InlineCode,3918115,343,245)
{
WorkPoints=#8:dosearch|
EventPoints=#8:onsearch|
DataPoints=#4:text|8:filename|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|30: text,filename:THI_Event;|25: onSearch:THI_Event;|6: |53: procedure doSearch(var Data:TData; index:word);|5: end;|0:|14:implementation|0:|31:procedure THiAsmClass.doSearch;|3:var|14: F: TextFile;|14: S,t: string;|5:begin|30: t:= ReadString(Data, text);|45: AssignFile(F,ReadString(Data, filename)); |12: Reset(F);|26: While Eof(F)<> True do|9: begin|18: Readln(F, S);|53: If pos(t,s)<> 0 then _hi_onEvent(onSearch, S); |8: end;|17: CloseFile(F);|4:end;|0:|0:|0:|15:{var f:PStream;|13: t:string;|31: buf:array[0..4096] of char;|18: len,p:integer;|5:begin|31: t := ReadString(Data, text);|54: f := NewReadFileStream(ReadString(Data, filename));|35: fillchar(buf, sizeof(buf), );|21: len := length(t); |31: while f.position < f.size do|10: begin|52: copymemory(@buf[0], @buf[4096-1 - len], len);|48: p := f.read(buf[len], sizeof(buf) - len);|22: //buf[p] := #0;|24: p := pos(t, buf);|21: while p > 0 do|14: begin|45: _hi_onEvent(onSearch, f.position);|39: p := posex(t, buf, p + len);|13: end;|9: end;|10: f.free;|6:end; }|0:|4:end.|
link(onsearch,9209952:doAdd,[])
link(text,11092326:Text,[])
link(filename,5179944:Value,[(356,223)(391,223)])
}
Add(Memory,5179944,385,182)
{
Default=String(log1.txt)
}

------------ Дoбавленo в 00.18:
Вот что бы я добавил точно, так это загрузку StrList-a прямо из стрима, а ведь такие функции есть и записи и чтения
Пожалуй, я сейчас попробую, лишним не будет
карма: 22

0