s = 'AAA|BBB|CCC|DDD';
怎样分割成:
 ss[0] = 'AAA';
 ss[1] = 'BBB';
 ss[2] = 'CCC';
 ss[3] = 'DDD';

解决方案 »

  1.   

    var ss:tstringlist;
        s:string;
    begin
       s:='AAA|BBB|CCC|DDD';
       ss:=TStringlist.Create;
       ss.Delimiter:='|';
       ss.DelimitedText:=s;
       for i:=0 to ss.count-1 do 
       begin
          showmessage(ss.string[i]);
       end;
      

  2.   

    function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar; Strings: TStrings): Integer;
      

  3.   

    ExtractStrings(['|'], [], PChar(s), ss);
      

  4.   

    一、给一楼改一下:var ss:tstringlist;
        s:string;
        i : integer;
    begin
       s:='AAA|BBB|CCC|DDD';
       ss:=TStringlist.Create;
       ss.Delimiter:='|';
       ss.DelimitedText:=s;
       for i:=0 to ss.count-1 do
       begin
          showmessage(ss[i]);
       end;
       SS.Free;
    end;二、用StringReplace函数var
      S : string;
      SS : TStringList;
      I : integer;
    begin
      S := 'AAA|BBB|CCC|DDD';
      SS := TStringList.Create;
      SS.Text := StringReplace(S, '|', #10, [rfReplaceAll]);
       for i:=0 to ss.count-1 do
       begin
          showmessage(ss[i]);
       end;
      SS.Free;
    end;
      

  5.   

    楼主问的答案是字符数组,类似其他语言的split函数功能吧...楼上给位再改写一下:)CSDN论坛浏览器:浏览、发帖、回复、结贴自动平均给分,下载地址:http://CoolSlob.ys168.com
      

  6.   

    本想在S所占堆内存里的'|'处插入17个字节,把字串长度、NULL、分配大小、引用计数等信息写入,然后直接用这块内存作为array of string的各元素目标地址,无奈能力有限,太复杂只有放弃,改为下面这种人人都会的方式:把字串分解到字串数组里去:var
      S : string;
      SArray : array of string;
      I, J, K, L : integer;
    begin
      S := 'AAA|BBB|CCC|DDD';
      L := 0;
      J := 1;
      K := 0;
      for I := 1 to Length(S)+1 do
        if (S[I] <> '|') and (I <= Length(S)) then Inc(K) else
          begin
          Inc(L);
          SetLength(SArray, L);
          SArray[L-1] := Copy(S, J, K);
          K := 0;
          J := I+1;
          end;
      for I := Low(SArray) to High(SArray) do
        Showmessage(SArray[I]);
    end;
      

  7.   

    在看下面的程序前,首先看声明:一、声明1:实用中还是TStringList分割保存最方便。前面已用TStringList实现。并且前面的保存为“字符串数组”的方法也是可用的。
    二、声明2:下面的程序只是编译运行时凑巧没有出错而已。^_^
    三、声明3:可以提意见,但不要打击我 ^_^
    四、声明4:详细的注释,请访问:http://rabbitfox.blog.sohu.com/38253374.html//另类建立String对象的探索
    procedure TForm1.Button1Click(Sender: TObject);
    { 程序可能隐藏巨大的BUG,特此声明 }
    var
      S : string; //这是欲转换的字符串
      Buf : array of Byte;  //因为不便对常量空间进行下面的操作,需要这样一块内存
      SArray : array of string; //这是我们要得到的字符串数组
      PW : ^LongInt;
      L, I, J, K : integer;
    begin
      S := 'ABC|DEFG|HI|JKL|MN|OP';
      L := Length(S)+16;
      SetLength(Buf, L);
      Move( S[1], Buf[16], L-16);
      PW := @Buf[0];
      K := 0;
      J := 0;
      I := 16;
      while I <= L do
        begin
        if (Buf[I] <> Byte('|')) and (I<>L) then Inc(K) else
          begin
          PW^ := 0;//这4个字节应该写什么?暂全充0  (不明)
          Inc(PW);
          PW^ := K+17; //分配大小。K+17正确吗?(不明)
          Inc(PW);
          PW^ := 0;//引用计数。此时没有被引用,写0对吗?(不明)
          Inc(PW);
          PW^ := K;//字串长度 (明确)
          Buf[I] := 0;//NULL终止符 (明确)      Inc(J); //动态改变结果字符串数组的大小
          SetLength(SArray, J);
          integer(SArray[J-1]) := integer(@Buf[I-K]);//使字串数组的这个元素指向当前“子”串      if L<>I then
            begin
            L := L+16;
            SetLength(Buf, L);
            Move(Buf[I+1], Buf[I+17], L-I-17);
            PW := @Buf[I+1];
            K := 0;
            I := I + 16;
            end;
          end;
        Inc(I);
        end;
        L := L + 1;
        SetLength(Buf, L);
        Buf[L-1] := 0;
      for I := Low(SArray) to High(SArray) do //看一下我们得到的字符串数组(只能看一看了,引用就错。哈哈)
        showmessage(SArray[I]);
    end;(过往高人不要笑话我。 ^_^ )
      

  8.   

    如果连编译运行都通不过,请到http://rabbitfox.blog.sohu.com/38253374.html去,复制代码,注意,有一个函数ShowBuff也要一起复制,去掉相应的注释,试一下。
    反正我心里那是相当的没底。
      

  9.   

    我的StringList怎么没有Delimiter属性, DELPHI 5.0
      

  10.   

    ss= s.split("|");
    这个是在数组JS上用的,