一行字a124,好人,坏人,0203,如何把这一行字每个逗号之间的字符串取出?
取出a124
    好人
    坏人
    0203

解决方案 »

  1.   

    ts:Tstringlist;    
        ts:=Tstringlist.create;
        ts.Delimiter:=',';
        ts.DelimitedText:='a124,好人,坏人,0203'
        showmessage(ts.text)
    ....
      

  2.   

    这是我写的方法:
    //1.根据源字符串和子串位置通过分隔符取字符子串,默认分割符为';'
    function FnGetPartString(aSource:string;nPart:Integer;aSeparator:String=';'):string;
    var
      lnfor:integer;
      lsstr:string;
    begin
      lnfor:=Pos(aSeparator,aSource);
      if (lnfor=0) then
      begin
        Result:=aSource ;
        exit;
      end;
      if nPart>1 then
      begin
        aSource:=Copy(aSource,lnfor+1,length(aSource));
        lsstr:=FnGetPartString(aSource,nPart-1,aSeparator);
      end
      else  if nPart=1  then
        lsstr:=copy(aSource,1,lnfor-1);  result:=lsstr;
    end;
    //2. 根据源字符串和分隔符取字符串中被分割符分割的字串个数function FnGetPartCount(aSource:String;aSeparator:String=';'):integer;
    var
      ln:integer;
    begin
      ln:=0;
      if aSource='' then
      begin
        Result:=0;
        exit;
      end;
      if Pos(aSeparator,aSource)>0 then
      begin
        aSource:=copy(aSource,Pos(aSeparator,aSource)+1,length(aSource));
        ln:=FnGetPartCount(aSource,aSeparator)+1;
      end
      else
      if Pos(aSeparator,aSource)=0 then
        ln:=ln+1;
      Result:=ln;
    end;
    ====================================
    例子:  取第2个字符串
     fnGetPartString(YourString,2,',');
      
     依次取出所有的字符串
     var
       I:Integer;
     begin
       listbox1.Items.Clear;
       for I:=0 to fnGetPartCount(YourString,',') do
         listbox1.Items.Add(fnGetPartString(YourString,i,','););
       
     end;  
         
      

  3.   

    a := 'a,b,c,d';var
      L: TStringList;...L.CommaText := a;...
      

  4.   

    getit911(Windows转Linux中) 
    你是用的D7吧,今天我刚装D7,才发现TStringlist有这么两个属性,以前D6没有,哈哈这个功能好,以前我喜欢用StringReplace
    ----------------------------------------------------------------
                 花自飘零水自流,一种相思,两处闲愁。
                   此情无计可消除,才下眉头,又上心头。
    ----------------------------------------------------------------
      

  5.   

    procedure TForm1.FormClick(Sender: TObject);
    var
    ts:Tstringlist;
    mm:array[0..3]of string;
    i:integer;
    begin
    edit1.Text:='';
        ts:=Tstringlist.create;
        ts.Delimiter:=',';
        ts.DelimitedText:='a124,好人,坏人,0203';
        for i:=0 to 3 do   mm[i]:=ts.Strings[i];
        for i:=0 to 3  do  edit1.Text:=edit1.Text +mm[i];
    end;
      

  6.   

    To: getit911(Windows转Linux中)
    引用:  
    >>ts.Delimiter:=',';
    >>ts.DelimitedText:='a124,好人,坏人,0203'感谢,非常好用,有学了一招,哈哈哈
      

  7.   

    var 
      strlist: Tstringlist;
    begin
      strlist := SplitString('a124,好人,坏人,0203',',');
      strlist[1];  //a124
      strlist[2];  //好人
      strlist[3];  //坏人
      strlist[4];  //0203
    end;
    function SplitString(const source, flag: string): Tstringlist;
    var
      temp: string;
      i: integer;
    begin
      if Trim(source)<>'' Then
      begin
      Result := Tstringlist.Create;
      temp := source;
      i := pos(flag, source);
      while i > 0 do
      begin
        Result.Add(copy(temp, 0, i - 1));
        delete(temp, 1, i);
        i := pos(flag, temp);
      end;
      Result.Add(temp);
      end
      else
       Result.Add('');
    end;
      

  8.   

    function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar; Strings: TStrings
    ): Integer;
    你要的是不是这个功能,把字符串分割成字符串数组;
      

  9.   

    1.pos2.TstringList
      procedure GetListData(s: string; a: TStringList);
      begin
        a:= TStringList.Create ;
        a.text := StringReplace(s, ',', #13#10, [...]);
      end;
    procedure getdata
    var a: TStringList;
    begin
      a := TStringList.Create;
      GetListData(s, a);
      ....
      //循环....取
    end;
      

  10.   

    直接用TStringList的CommaText属性赋值是最方便的了,我天天这么用
      

  11.   

    用 Copy 和 Pos 函数