高手们好,我做的一个程序是有客户端和服务器端,客户端从服务器端接收到的数据  AllData:='001,jj,男,24,
2011-11-23 10:20:22',我想用分隔符以逗号的形式分开,结果‘2011-11-23 10:20:22’之间的空格也分开了 我用的是TStringList list3
list3.Delimiter:=',';
list3.DelimitedText:=trim(AllData);
最终结果‘2011-11-23 10:20:22’也分成了两段 怎么样才能不分开 谢谢了

解决方案 »

  1.   

    自己使用pos定位
    或者,先把空格替换为下划线再分割
      

  2.   

    用stringreplace替换掉所有空格为指定的一个特殊字符,分离后再把这个特殊字符替换成空格
    不过这会出现问题,就是多个空格,最后变成一个空格;如:
    s:='@@XXOO@@';
    list3.DelimitedText:=stringreplace(AllData,' ',s,[rfReplaceAll]);
    for i:=0 to list3.count-1 do
      showmessage(stringreplace(list3.strings[i],s,' ',[rfReplaceAll]));不想这样的话,也可以使用pos,copy截取
      

  3.   

    手工写吧,我一个长度几千的SQL都自己写的。
      

  4.   

    delphi 的TStringList不太好用。自己写个函数。包涵进去。
    function GetStringN(Astring:String;Dlmter:Char;nPos:integer):string;
    var
     s:string;
     num,k,i:integer;
    begin
      Result:='';
      s :='';
      num:=0;
      i:=0;
      k:=0;
      while (k<>1) and (i<length(Astring)) do
      begin
        if (Astring[i]=dlmter) then
        begin
          num:=num+1;
          if (num=nPos) then
              k:=1
          else
            s:='';
        end
        else
          s:=s+Astring[i];
        i:=i+1;
      end;
      Result:=s;
    end;
      

  5.   

      AllData:='001,jj,男,24,2011-11-23 10:20:22';  SS_Delimit := TStringList.Create;
      try
        SS_Delimit.Text := StringReplace(AllData, ',', #13#10, [rfReplaceAll]); //把逗号替换成回车换行符
        if SS_Delimit.Count = 5 then
        begin
          S_1 := SS_Delimit[0];
          S_2 := SS_Delimit[1];
          S_3 := SS_Delimit[2];
          S_4 := SS_Delimit[3];
          S_5 := SS_Delimit[4];
        end;
      finally
        SS_Delimit.Free;
      end;
      

  6.   

    SplitColumns是IdStrings.pas里的函数,    
    它修正了TStrings.DelimitedText和TStrings.Delimiter将空格也作为分隔符的问题   
    SplitColumns   
    uses IdStrings;   
    var  
      s : string;   
      sl : TStringList;   
      i : Integer;   
    begin  
      s := '001,jj,男,24,2011-11-23 10:20:22';   
      sl :=TStringList.Create;   
      SplitColumns(s,sl,',');   
      for i:=0 to sl.Count-1 do  
        ShowMessage(sl.Strings[i]);   
      sl.Free;   
    end; 
      

  7.   

    手工分割最保险,用POS定位分号的位置,然后一个个分割
      

  8.   

    name;sex;age;"2011-12-9 15:36:40"
    结果符合你的需要,如下:
    name
    sex
    age
    2011-12-9 15:36:40TStringList中的默认的QuoteChar值为"
    所以当你把日期的首尾用QuoteChar界定后,就不会在空格处被分割了