440982023041013999|724|9383528||||||
1|1|605924021200000076|3950|||0|||
2|1|605924021200000390|11700|||0|||
3|1|605924021200000687|108389|||0|||
4|1|605924021200000734|13290|||0|||
5|1|605924021200001253|8491|||0|||
6|1|605924021200001261|2607|||0|||想得到除了第一行之外的每一行第三和第四个竖杠之间的数字。(第一行不管它)
3950
11700
108389
13290
8491
2607最好不要用Delimiter,因为这会破坏Tstringlist的格式。我想把这些数字累加出一个数出来。求源代码,解决后马上给分,谢谢。

解决方案 »

  1.   

    怎么你这问题问好几天了!反正用pos和copy函数。简单的很,自己处理。如果第三个|位置一样就更简单了!自己研究
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
     SL: TStringList;
     I, Res, iPos1, iPos2: Integer;
     S: string;
    begin
      SL := TStringList.Create;
      try
        SL.Add('440982023041013999|724|9383528||||||');
        SL.Add('1|1|605924021200000076|3950|||0|||');
        SL.Add('2|1|605924021200000390|11700|||0|||');
        SL.Add('3|1|605924021200000687|108389|||0|||');
        SL.Add('4|1|605924021200000734|13290|||0|||');
        SL.Add('5|1|605924021200001253|8491|||0|||');
        SL.Add('6|1|605924021200001261|2607|||0|||');
        Res := 0;
        for I := 1 to SL.Count - 1 do
        begin
          iPos1 := PosEx('|', SL[I], 5) + 1;
          iPos2 := PosEx('|', SL[I], iPos1);
          S := Copy(SL[I], iPos1, iPos2 - iPos1);
          ShowMessage(S);
          Res := Res + StrToInt(S);
        end;
      finally
        SL.Free;
      end;
    end;
      

  3.   

    用PosEx('|', SL[I], 5)的话,如果第一个序号超过9变成两位数就不使用了啊?440982023041013999|724|9383528||||||
    1|1|605924021200000076|3950|||0|||
    2|1|605924021200000390|11700|||0|||
    3|1|605924021200000687|108389|||0|||
    4|1|605924021200000734|13290|||0|||
    5|1|605924021200001253|8491|||0|||
    6|1|605924021200001261|2607|||0|||
    7
    8
    9
    10
    11
      

  4.   

    for I := 1 to SL.Count - 1 do
        begin
          iPos1 := Pos('|', SL[I]);
          iPos1 := PosEx('|', SL[I], iPos1 + 5) + 1;
          iPos2 := PosEx('|', SL[I], iPos1);
          S := Copy(SL[I], iPos1, iPos2 - iPos1);
          ShowMessage(S);
          Res := Res + StrToInt(S);
        end;