delphi tStringList 循环 如何得到重复的代码和数量

var
lss_Res: TStrings;
s,a,nm: string;
ss:TStringList;
i,j:Integer;
jshangpingdm8:array[1..20] of string;
jshangpingqty8:array[1..20] of string;
begin
lss_Res := TStringList.Create;
s :='1-62-0-命令内容:商品;代码:103;数量:2;代码:104;数量:4;代码:105;数量:5;卡号:001';
s := StringReplace(s, ':', ':=', [rfReplaceAll]);
s := StringReplace(s, ';', #$0D#$0A, [rfReplaceAll]);
lss_Res.Text := s;
ss:= split(a,'-');
for I := 0 to lss_Res.Count - 1 do
begin
jshangpingdm8[i]:=(lss_Res.Values['代码:']);
jshangpingqty8[i]:=(lss_Res.Values['数量:']);
end;
就是我要得到代码:103;数量:2;代码:104;数量:4;代码:105;数量:5; 这些输入插入到数据库 例如:代码=103,数量=2 ,然后第二组数量=4;代码=105 以次类推就得到后面的数字 就这样插入到数据库

试编写代码如下:

procedure TForm1.btn1Click(Sender: TObject);
var
  lss_Res: TStrings;
  s, a, nm: string;
  ss: TStringList;
  i, j: integer;
  jshangpingdm8: array [1 .. 20] of string;
  jshangpingqty8: array [1 .. 20] of string;
begin
  lss_Res := TStringList.Create;
  lss_Res.Delimiter := ';';

  ss := TStringList.Create;
  ss.Delimiter := ':';

  s := '1-62-0-命令内容:商品;代码:103;数量:2;代码:104;数量:4;代码:105;数量:5;卡号:001';

  lss_Res.DelimitedText := s;

  j := 1;
  for i := 0 to lss_Res.Count - 1 do
  begin
    ss.DelimitedText := lss_Res[i];
    if ss.Count>1 then
    begin
      if (ss[0]='代码') then
      begin
        jshangpingdm8[j] := ss[1]
      end
      else
      if (ss[0]='数量') then
      begin
        jshangpingqty8[j] := ss[1];
        Inc(j);
      end;
    end;
  end;

  lss_Res.Free;
  ss.Free;
end;

运行调试截图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-04
类似情况,我是用这种方法。
再弄一个TSTRINGLIST,比如A,A的条目是:字段#9数量.如103#92这种型式存储。
每遇上一个字段,比如103,就到A中去对比,看里面有没有。
如果有就把数量+1,如果没有就ADD('103' + #9 + '1');
最后只需把A往数据库里一写就OK了。
这个方法虽然有点老土,但是很实用,代码很好写。
如果内容很多,要考虑一下在A中查找时的效率,有一些比如折半之类的方法。
第2个回答  2012-09-28
你只要后面的103、2、104、4等等数字,还是要 “代码=103、数量=2”等等?

你去搜搜TStringList的字符串分割吧。百度有很多,另外,我贴个地址,我之前帮别人解决的。你自己照着做。

http://zhidao.baidu.com/question/434384368.html?oldq=1
相似回答