有一个字符串如下:
2#66|2001/06/21|2001/07/20|5510|510#507|2001/07/21|2001/08/20|5266|166其中前面的2是有几个分组,后面是具体的组,组的格式为:
#ID|开始日期|结束日期|金额|罚金
说明:每项用’|’分割可能有多个组各个组用“#”分开
大虾们能不能用比较好的算法把每一个组每个项分开,请就上面的例子写成详细的代码,最好别用省略号,越详细分越高!
2#66|2001/06/21|2001/07/20|5510|510#507|2001/07/21|2001/08/20|5266|166其中前面的2是有几个分组,后面是具体的组,组的格式为:
#ID|开始日期|结束日期|金额|罚金
说明:每项用’|’分割可能有多个组各个组用“#”分开
大虾们能不能用比较好的算法把每一个组每个项分开,请就上面的例子写成详细的代码,最好别用省略号,越详细分越高!
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure GetItems(s : string;divc : char;ts : tstringlist);
var
p : integer;
begin
s := s + divc;
repeat
p := pos(divc,s);
if p > 0 then begin
ts.Add(copy(s,1,p-1));
s := copy(s,p+1,length(s)-p);
end;
until(p =0);
end;procedure TForm1.Button1Click(Sender: TObject);
var
ts1,ts2 : tstringlist;
s : string;
i : integer;
begin
ts1 := tstringlist.create;
ts2 := tstringlist.create;
i := pos('#',Edit1.Text);
s := copy(Edit1.Text,i+1,length(Edit1.Text)-i);
getitems(s,'#',ts1);
for i := 0 to ts1.Count -1 do begin
ts2.Clear;
getItems(ts1[i],'|',ts2);
Memo1.lines.Add(ts2.text);
end;
ts1.Clear;
ts2.Clear;
end;
end.
group,itm:Tstringlist;
p,i:integer;
begin
s:='2#66|2001/06/21|2001/07/20|5510|510#507|2001/07/21|2001/08/20|5266|166' ;
p:= pos('#',s);
s:=copy(s,p+1,length(s)-p);
group:=tstringlist.Create;
itm:=tstringlist.Create;
group.Delimiter:='#';
group.DelimitedText:=s;
itm.Delimiter:='|';
for p:=0 to group.Count-1 do
begin
itm.DelimitedText:=group.Strings[p];
for i:=0 to itm.Count-1 do
begin
showmessage('第'+inttostr(p+1)+'组第'+inttostr(i+1)+'个字符为'+itm.Strings[i]);
end;
end;
end;
function SplitString(const source,ch:string):tstringlist;vartemp:string;i:integer;beginresult:=tstringlist.Create;temp:=source;i:=pos(ch,source);while i<>0 dobeginresult.Add(copy(temp,0,i-1));delete(temp,1,i);i:=pos(ch,temp);end;result.Add(temp);end;然后调用就可以了!
再改点就OK
现在还用D3?为什么不升级呀?
hehe, I'v got another skill for TStrings!!!Wonderful!