Tad писал(а):
пример в студиюО! Я как раз доделал свое "возмездие": <нерабочая версия>, правда оно сыровато, и возможны утечки памяти (хотя вроде на FreeData не пожадничал ). Вот попробуй заменить всю эту штуку на StrEnum с последним обновлением по svn (раньше он парсил текст)
------------ Дoбавленo в 17.54:
Гыгы, ну вот, мое "возмездие" неверно парсит "1111:2222" с делиметром "1:"
------------ Дoбавленo в 17.59:
Поправил, вот рабочий вариант:
Add(MainForm,2953706,21,105)
{
Height=319
Position=1
}
Add(InlineCode,7013456,301,231)
{
WorkPoints=#7:doParse|
EventPoints=#7:onParse|
DataPoints=#4:SStr|8:Delimetr|
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|36: Delimetr,SStr,Direct:THI_Event;|23: onParse:THI_Event;|5: |52: procedure doParse(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|51:function FParse(var str:string; del:string):string;|14:var p:integer;|5:begin|20: p := Pos(del,str);|21: if p < 1 then begin|18: Result := str;|14: str := ';|16: end else begin|30: Result := Copy(Str,1,p-1);|34: Delete(str,1,p+length(del)-1);|6: end;|4:end;|0:|30:procedure THiAsmClass.doParse;|15:var id:integer;|19: str,del:string;|17: dt,tdt:TData;|12: p:PData;|5:begin|35: str := ReadString(_Data,SStr,');|39: del := ReadString(_Data,Delimetr,');|36: id := ReadInteger(_Data,Direct,0);|2: |31: dtString(dt,FParse(str,del));|26: while str <> ' do begin|34: dtString(tdt,FParse(str,del));|26: AddMTData(@dt,@tdt,p);|6: end;|26: _hi_onEvent(onParse,dt);|2: |16: FreeData(@dt);|4:end;|0:|4:end.|
link(SStr,5667605:Text,[(307,222)(272,222)])
link(onParse,1161905:doEvent,[])
link(Delimetr,8813096:Text,[])
}
Add(Memo,5667605,266,168)
{
Width=390
Height=230
Strings=#9:1111:2222|
ScrollBars=2
}
Add(Button,8227714,252,231)
{
Top=270
Caption="Parse"
link(onClick,7013456:doParse,[])
}
Add(ComboBox,15328903,357,168)
{
Left=55
Top=270
Width=95
Height=21
Strings=#6:Вперед|5:Назад|
Text="Вперед"
ReadOnly=0
Point(Index)
}
Add(Memo,8813096,308,168)
{
Top=230
Width=390
Height=35
Strings=#2:1:|
ScrollBars=2
}
Add(Message,7164370,448,231)
{
}
Add(MT_Enum,3727329,399,231)
{
link(onItem,15553263:doWork2,[])
}
Add(MT_IndexToChanel,1161905,350,231)
{
Point(Index)
link(onEvent1,3727329:doEnum,[])
link(onEvent2,7738720:doEnum,[(390,244)(390,286)])
link(Index,15328903:Index,[(356,222)(377,222)])
}
Add(MT_Enum,7738720,399,280)
{
Type=1
link(onItem,15553263:doWork3,[(438,286)])
}
Add(HubEx,15553263,434,231)
{
link(onEvent,7164370:doMessage,[])
}
[flood]Вот блин, вместо того чтобы доделывать код RegExpr, я тут с вами сижу "базарю"[/flood]