请各位高手分析一下,下面这段代码为什么执行不过去。谢谢
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}
function SplitString(const source,ch:string):tstringlist;
var
 temp:string;
 i:integer;
begin
 result:=tstringlist.Create;
 temp:=source;
 i:=pos(ch,source);
 while i<>0 do
 begin
   result.Add(copy(temp,0,i-1));
   delete(temp,1,i);
   i:=pos(ch,temp);
 end;
 result.Add(temp);
end;procedure TForm1.Button1Click(Sender: TObject);
var s:string;
    I:integer;
begin
  S:=SplitString('afsdfsdaaa|bbfdsfsdb|ccc','|');
for i:=0 to s.Count-1 do
 b:=b+s.Strings[i]+#13;
showmessage(b);
s.free;
end;end.
小弟调用此函数执行S:=SplitString('afsdfsdaaa|bbfdsfsdb|ccc','|');此条语句是执行不过去,请
各位高手帮忙,谢谢了!

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}
    function SplitString(const source,ch:string):tstringlist;
    var
     temp:string;
     i:integer;
    begin
     result:=tstringlist.Create;
     temp:=source;
     i:=pos(ch,source);
     while i<>0 do
     begin
       result.Add(copy(temp,0,i-1));
       delete(temp,1,i);
       i:=pos(ch,temp);
     end;
     result.Add(temp);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var s:TstringList;
        I:integer;
        B: string;
    begin
      S:= SplitString('afsdfsdaaa|bbfdsfsdb|ccc','|');
    for i:=0 to s.Count-1 do
     b:=b+s.Strings[i]+#13;
    showmessage(b);
    s.free;
    end;end.
      

  2.   


      S:=SplitString('afsdfsdaaa|bbfdsfsdb|ccc','|');
    函数的返回值为Tstrings;与接受返回值的变量S类型不匹配;
    将S定义为TStrings类型
    然后增加变量B的定义就可以了;
      

  3.   

    S:=SplitString('afsdfsdaaa|bbfdsfsdb|ccc','|');  XXXXXXXXXXXXX
    你的s是string类型,而splitstring返回stringlist类型,怎么匹配??
      

  4.   

    楼上的已经给出正确的了楼主是:
    基本概念模糊,变量没定义就拿来用 b:=b+s.Strings[i]+#13;
    函数没声明
    类型不一致 S:=SplitString('afsdfsdaaa|bbfdsfsdb|ccc','|');