写一个函数:
要求依照逗号或者其他分隔符取出字符串中的某一段
例如:‘A,B,C,D,E;F,G’
StrSen(s,',',2);以逗号分隔,取出上面字符串的第2个字段,结果 B
StrSen(s,';',2);以分号分隔,取出上面字符串的第2个字段,结果 F,G
StrSen(s,'D,E',2);以D,E分隔,取出上面字符串的第2段内容,结果 ;F,G新人求教,刚刚开始学习,谢谢帮助!

解决方案 »

  1.   

    function StrSen(const Str, SubStr: string; Idx: integer): string;
    var
      ssTmp : TStringList;
    begin
      Result := '';
      ssTmp := TStringList.Create;
      ssTmp.Text := StringReplace(Str, SubStr, #10, [rfReplaceAll]);
      if Idx <= ssTmp.Count+1 then
        Result := ssTmp[Idx-1];
      ssTmp.Free;
    end;procedure TForm1.Button1Click(Sender: TObject);////测试
    var
      S : string;
    begin
      S := 'A,B,C,D,E;F,G;D,E,ABCDE';
      ShowMessage(StrSen(s,',',2));  //  'B'
      ShowMessage(StrSen(s,';',2));  //  'F,G'
      ShowMessage(StrSen(s,'D,E',2));//  ';F,G;'
      ShowMessage(StrSen(s,'D,E',3));//  ',ABCDE'
    end;利用POS函数也可以.
      

  2.   

    谢谢了~~~我本来也是想用POS的函数的,想读取第一个在判断,不是就delete这一段,再从新读取的,写了几次都出问题。
    ssTmp.Text := StringReplace(Str, SubStr, #10, [rfReplaceAll]);
    能解释一下这段吗?谢谢
      

  3.   

    ssTmp.Text := StringReplace(Str, SubStr, #10, [rfReplaceAll]);ssTmp是一个TStringList对象, 也就是字符串列表
    上面这句,是用StringReplace函数,把Str中的SubStr替换为换行符,然后赋值给ssTmp.Text
    例如: Str = 'aa,bb,cc';
    把逗号替换为换行符后,赋值给ssTmp, 于是ssTmp就是:ssTmp[0]  --> 'aa'
    ssTmp[1]  --> 'bb'
    ssTmp[2]  --> 'cc'再有不明, 查阅StringReplace函数说明