procedure TForm1.Button1Click(Sender: TObject); var temp:string; i,p,p1,p2,p3:integer; begin memo1.Text:='08568|2^13389|6^'+ #13#10+ '08568|1^12268|4^08568|6'+#13#10+ '08568|4^13389|6^08568|1^13389|6^08568|3^13389|6^';
p1:=0; p2:=0; p3:=0; p:=0; for i :=0 to memo1.Lines.Count-1 do begin temp:=''; temp:= memo1.Lines.Strings[i]; while pos('08568|',temp)> 0 do begin p1:=p1+strtoint(copy(temp,pos('08568|',temp)+6,1)); delete(temp,pos('08568|',temp),9); end;
temp:=''; temp:= memo1.Lines.Strings[i]; while pos('13389|',temp)> 0 do begin p2:=p2+strtoint(copy(temp,pos('13389|',temp)+6,1)); delete(temp,pos('13389|',temp),9); end;
temp:=''; temp:= memo1.Lines.Strings[i]; while pos('12268|',temp)> 0 do begin p3:=p3+strtoint(copy(temp,pos('12268|',temp)+6,1)); delete(temp,pos('12268|',temp),9); end;
end;
showmessage('p1:'+inttostr(p1)+#13#10+'p2:'+inttostr(p2)+#13#10+'p3:'+inttostr(p3)); end;
----------------------------------------------
to be ,not to be, is life! until now, I still study life....
procedure TForm1.Button1Click(Sender: TObject); var temp:string; i,t,p,p1,p2,p3:integer; begin memo1.Text:='08568|2^13389|6^'+ #13#10+ '08568|1^12268|4^08568|6^'+#13#10+ '08568|4^13389|6^08568|1^13389|6^08568|3^13389|6^';
p1:=0; p2:=0; p3:=0; p:=0; for i :=0 to memo1.Lines.Count-1 do begin temp:=''; temp:= memo1.Lines.Strings[i]; while pos('08568|',temp)> 0 do begin delete(temp,1,pos('08568|',temp)+5); if pos('^',temp)>0 then p1:=p1+strtoint(copy(temp,1,pos('^',temp)-1)); end;
temp:=''; temp:= memo1.Lines.Strings[i]; while pos('13389|',temp)> 0 do begin delete(temp,1,pos('13389|',temp)+5); if pos('^',temp)>0 then p2:=p2+strtoint(copy(temp,1,pos('^',temp)-1)); end;
temp:=''; temp:= memo1.Lines.Strings[i]; while pos('12268|',temp)> 0 do begin delete(temp,1,pos('12268|',temp)+5); if pos('^',temp)>0 then p3:=p3+strtoint(copy(temp,1,pos('^',temp)-1)); end; end; showmessage('08568:'+inttostr(p1)+#13#10+'13389:'+inttostr(p2)+#13#10+'12268:'+inttostr(p3)); end;
----------------------------------------------
to be ,not to be, is life! until now, I still study life....
p1:=0; p2:=0; p3:=0; p:=0; for i :=0 to memo1.Lines.Count-1 do begin temp:=''; temp:=trim(memo1.Lines.Strings[i]);
if temp='' then break;
p:= strtoint(copy(temp,1,5)); case p of 08568: begin delete(temp,1,pos('|',temp)); p1:=p1+strtoint(temp); end; 13389: begin delete(temp,1,pos('|',temp)); p2:=p2+strtoint(temp); end; 12268: begin delete(temp,1,pos('|',temp)); p3:=p3+strtoint(temp); end; end; end;
showmessage('08568:'+inttostr(p1)+#13#10+'13389:'+inttostr(p2)+#13#10+'12268:'+inttostr(p3)); end;
----------------------------------------------
to be ,not to be, is life! until now, I still study life....
所有资料不用循环怎么做? 因为要历遍所有的资料字串啊! 若有人有更好的方法, 可以提出做法啊!!
----------------------------------------------
to be ,not to be, is life! until now, I still study life....
例如楼上的有50万笔资料, 可以把它切成50个多绪来处理, 这样每一个单独的程序处理1万笔 它只要同时处理这1万笔就够了 时间也节省很多. 这是以空间换取时间的一种办法. 不过, 这程式写起来不好写就是了=.= 若写得不好, 可能很容易就死当
----------------------------------------------
to be ,not to be, is life! until now, I still study life....
其实数据多则慢有个很重要的原因:你一次将所有数据读入内存了!所以要提高速度,除了以上所述方法,还应用“流”(TStream,如TMemoryStream,TFileStream)来分块读入,不过那样得自己按字符搜索了; 至于用TStringList,示例如下: var iCount, i: Integer; begin with TStringList.Create do begin Delimiter := '|'; DelimiteredText := 你的串; iCount := 0; for i:=0 to Count-1 do if AnsiSameStr(Strings[i], '08568') then Inc(iCount); end; end;