文本格式如下:
023842394201342|343242423423|342342424|533423|2455
3423532543453254645|4534532|5443534|342342|4554
想取第二个“|”与第三个“|”的数据
    第三个“|”与第四个“|”的数据
并进行转换相加!
请给我一个函数,谢谢!

解决方案 »

  1.   

    用http://www.baidu.com/s?wd=delphi+split&cl=3
    找找
      

  2.   

    //给我加分function SubStrCount(const substr: String; text: String): Integer;
    begin
    //not case sensitive
     if (Length(substr)=0) or (Length(text)=0) then
     Result:=0
     else
     Result:=(Length(text)-Length(StringReplace(text,substr,'',[rfReplaceAll,rfIgnoreCase]))) div length(substr);
    end;function MiddleSubStr(const splitStr: String; text: String;
      Postion: Integer): String;
    var
    I,J,M,N:Integer;
    tempStr:String;
    begin
      Result:='';
      tempStr:='';
      I:=SubStrCount(splitStr,text);
      if (I=0) or (I<Postion) then
      exit;
      for J:=1 to length(splitStr) do
      tempStr:=tempStr+'x';
      for J:=1 to I do
      begin
      M:=AnsiPos(splitStr,text);
      N:=AnsiPos(splitStr,StringReplace(text,splitStr,tempStr,[]));
      if J<>Postion then
      text:=StringReplace(text,splitStr,tempStr,[])
     // text:=Copy(text,I+Length(startStr),Length(text)-I-Length(startStr));
      else
      Result:=Copy(text,M+Length(splitStr),N-M-1);
      end;
    end;//use
    var
    IntStr1,IntStr2,targetStr:String;
    I1,I2,TargetNum:Integer;
    begin
    targetStr:='023842394201342|343242423423|342342424|533423|2455'+
    '3423532543453254645|4534532|5443534|342342|4554';IntStr1:=MiddleSubStr('|',targetStr,2);
    IntStr2:=MiddleSubStr('|',targetStr,3);
    try
    I1:=StrToInt(IntStr1);
    I2:=StrToInt(IntStr2);
    Target:=I1+I2;
    except
    end;
    end;
      

  3.   

    function TForm1.ExtractString(const aString: string; const aSeparator: char; var aPos: Integer): string;
    var
      I: Integer;
    begin
      I := aPos;
      while (I <= Length(aString)) and (aString[I] <> aSeparator) do Inc(I);
      Result := Trim(Copy(aString, aPos, I - aPos));
      if (I <= Length(aString)) and (aString[I] = aSeparator) then Inc(I);
      aPos := I;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      lString, lSubString: string;
      lPos, j: integer;
    begin
      lString := '023842394201342|343242423423|342342424|533423|2455';
      lPos := 1;
      j := 0;  while lPos <= Length(lString) do
      begin
        lSubString := ExtractString(lString, '|', lPos);
        inc(j);
        if j = 2 then    // 第二個
          showmessage(lSubString);
      end;
    end;
      

  4.   

    function SubStrCount(const substr: String; text: String): Integer;
    begin
    //not case sensitive
     if (Length(substr)=0) or (Length(text)=0) then
     Result:=0
     else
     Result:=(Length(text)-Length(StringReplace(text,substr,'',[rfReplaceAll,rfIgnoreCase]))) div length(substr);
    end;function MiddleSubStr(const splitStr: String; text: String;
      Postion: Integer): String;
    var
    I,J,M,N:Integer;
    tempStr:String;
    begin
      Result:='';
      tempStr:='';
      I:=SubStrCount(splitStr,text);
      if (I=0) or (I<Postion) then
      exit;
      for J:=1 to length(splitStr) do
      tempStr:=tempStr+'x';
      for J:=1 to I do
      begin
      M:=AnsiPos(splitStr,text);
      N:=AnsiPos(splitStr,StringReplace(text,splitStr,tempStr,[]));
      if J<>Postion then
      text:=StringReplace(text,splitStr,tempStr,[])
     // text:=Copy(text,I+Length(startStr),Length(text)-I-Length(startStr));
      else
      Result:=Copy(text,M+Length(splitStr),N-M-1);
      end;
    end;//use
    var
    IntStr1,IntStr2,targetStr:String;
    I1,I2,TargetNum:Integer;
    begin
    targetStr:='023842394201342|343242423423|342342424|533423|2455'+
    '3423532543453254645|4534532|5443534|342342|4554';IntStr1:=MiddleSubStr('|',targetStr,2);
    IntStr2:=MiddleSubStr('|',targetStr,3);
    try
    I1:=StrToInt(IntStr1);
    I2:=StrToInt(IntStr2);
    Target:=I1+I2;
    except
    end;
    end;
    function TForm1.ExtractString(const aString: string; const aSeparator: char; var aPos: Integer): string;
    var
      I: Integer;
    begin
      I := aPos;
      while (I <= Length(aString)) and (aString[I] <> aSeparator) do Inc(I);
      Result := Trim(Copy(aString, aPos, I - aPos));
      if (I <= Length(aString)) and (aString[I] = aSeparator) then Inc(I);
      aPos := I;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      lString, lSubString: string;
      lPos, j: integer;
    begin
      lString := '023842394201342|343242423423|342342424|533423|2455';
      lPos := 1;
      j := 0;  while lPos <= Length(lString) do
      begin
        lSubString := ExtractString(lString, '|', lPos);
        inc(j);
        if j = 2 then    // 第二個
          showmessage(lSubString);
      end;
    end;
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      lString :string;
      k:integer;
    begin
      lString := '023842394201342|343242423423|342342424|533423|2455';
      k:=strtoint(edit1.Text);
      showmessage(outString(lString,k));end;function TForm1.outString(lString:string;k: Integer): string; //成对出现,以双数为主,如(2、4、6、8)
    var
      lSubString: string;
      lPos, j: integer;
    begin
      lPos := 1;
      j := 0;
       while lPos <= Length(lString) do
      begin
        lSubString := ExtractString(lString, '|', lPos);
        inc(j);
        if j =k then
          result:=lSubString;
      end;
    end;function TForm1.ExtractString(const aString: string; const aSeparator: char; var aPos: Integer): string;
    var
      I: Integer;
    begin
      I := aPos;
      while (I <= Length(aString)) and (aString[I] <> aSeparator) do Inc(I);
      Result := Trim(Copy(aString, aPos, I - aPos));
      if (I <= Length(aString)) and (aString[I] = aSeparator) then Inc(I);
      aPos := I;
    end;
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      ScrStr:String;
      Rtn:string;
      begin
       ScrStr := '023842394201342|343242423423|342342424|533423|';
       Rtn := inttostr(GetData(ScrStr,2,3));
       showmessage(Rtn);
     end;
    function TForm1.GetData(ScrStr:string;k,j:integer):DWORD;
    var
      TmpStr,Tmp: String;
      LinePos: Integer;
      Data1, Data2: DWORD;
      Index: Integer;
        begin
        data1:=0;
        data2:=0;
          TmpStr := ScrStr;
           Index := 0;
           While(Pos('|', TmpStr) > 0) do
          begin
           LinePos := Pos('|', TmpStr);
            if (Index = k) Then
                begin
                       Tmp := Copy(TmpStr, 1, LinePos-1);
                       Data1 := StrToInt(Tmp);
                  end
            else if (Index =j) Then
                  begin
                    Tmp := Copy(TmpStr, 1, LinePos-1);
                    Data2 := StrToInt(Tmp);
                     Break;
                    end;
                  Delete(TmpStr,1,LinePos);
                 Index := Index + 1;
              end;
          Result := Data1 + Data2;
    end;