如 Str:='12345,abcdef,87654,uytre'分解成
Str1:='1234';
Str2:='abcdef';
Str3:='87654';......
如果不用TStringList的话有没有好的方法?

解决方案 »

  1.   

    var 
      a:array[1..3]of integer;
      i:integer;
    begin
      for i:=1 to 3 do 
         a[i]:=pos (str,',');
      str1:=copy(str,1,a[1]-1);
      str2:=copy(str,a[1]+1,a[2]-1);
    end;
    大概是这么个意思,没测试
      

  2.   

    使用COPY和POS函数
    Pos(',', str)
    Copy(str, x, Pos(',', str)
    自己组合组合联想联想
      

  3.   

    Classes 单元里面不是自带了这样一个函数吗,哪里用自己去写:function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar;
      Strings: TStrings): Integer;其中:
      Separators 就是分隔符集合,如 [',']
      WhiteSpace 指前面可以忽略的字符集合,一般传空即可:[]
      Content 就是待分割的字符啦
      Strings 就是存放分割后各字符串的列表啊
      

  4.   

    var
      l:integer;
      tempstr:string;
    begin
    l:=0;
    tempstr:='';
    for i:=1 to Length(Str) do
     begin
     if str[i]=',' then
       begin
         l:=l+1;
         Case l do
           1:str1:=tempstr;
           2:str2:=tempstr; 
         end;
         tempstr:='';
         Continue;
      end;
      tempstr:=tempstr+str[i]
    end;
      

  5.   

    如果只取其中的几个如何操作呢 比如取 STR3和str5的内容
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      str: String;
      Str1: TStringList;
    begin
      Str1 := TStringList.Create;
      Str:='12345,abcdef,87654,uytre';
      Str1.CommaText := Str;
      ShowMessage(Str1[0]);
      ShowMessage(Str[1]);
    end;
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      s,s1:string;
      str,str1:TStringList;
      i,j,m,n:integer;
    begin
      str:=TStringList.Create;
      str.Clear;
      str1:=TStringList.Create;
      str1.Clear;
      s:='124312,fsdfs,4234,fsdf';
      i:=length(s);
      for j:=1 to i do
      begin
        if s[j]=',' then
          str.Add(inttostr(j));
      end;
      m:=str.Count;
      if m>0 then
      begin
        for n:=0 to m-1 do
        begin
          if n=0 then
          begin
            s1:=copy(s,1,strtoint(str.Strings[n])-1);
            str1.Add(s1);
          end
          else
          begin
            s1:=copy(s,strtoint(str.Strings[n-1])+1,strtoint(str.Strings[n])-strtoint(str.Strings[n-1])-1);
            str1.Add(s1);
          end;
        end;
        if strtoint(str.Strings[m-1])<i then
        begin
          s1:=copy(s,strtoint(str.Strings[m-1])+1,i-strtoint(str.Strings[m-1]));
          str1.Add(s1);
        end;
      end;
      i:=str1.Count;
      for j:=0 to i-1 do
        showmessage(str1.Strings[j]);
    end;