现有一个字符串,形如
  3;a.txt;b.txt;c.txt
其中,3是指分组数量,即后面的分组名称数;
每个分组间用分号进行隔开.现想把每一个分组名称提取出来,函数应该如何写,自己试了几次,都是错的.
procedure TForm1.BitBtn1Click(Sender: TObject);
var
s,s1,t:string;
i,j:integer;
myarray:  array[0..3] of string;
karray:  array[0..3] of integer;
begin
  s:='3;123.txt; 456.txt;789.txt';
  s1:=copy(s,1,1);  for i:=1 to length(s) do begin
    t:=copy(s,i,i+1);
    if t=';' then
    begin
    karray[i]:=i;
    end;   for j:=0 to strtoint(s1)-1 do
   begin
       myarray[j]:=copy(s,karray[j],karray[j+1]);   end;
 end;
end;请帮助.

解决方案 »

  1.   


    var
      list:TStringList;
    begin
      list := TStringList.Create;
      list.Delimiter := ';';
      list.DelimitedText := '3;a.txt;b.txt;c.txt';
    end;
    这样
    list.Strings[0]是3
    list.Strings[1]是a.txt
    list.Strings[2]是b.txt
    list.Strings[3]是c.txt
      

  2.   

    如果要自己分段,使用pos函数
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    const
      S = '3;123.txt;456.txt;789.txt';
    var
      List: TStrings;
      myarray:  array[0..2] of string;
      I: Integer;
    begin
      List := TStringList.Create;
      List.Text := StringReplace(S,';',#10,[rfReplaceAll]);
      try
        for I := 0 to StrToInt(List.Strings[0])-1 do
          myarray[I] := List.Strings[I+1];
      finally
        List.Free;
      end;
    end;