var
Torm1: TForm1;
      v:integer;
  SArr : Array of String ;
implementation{$R *.dfm}
   Function FG(ss : String ) : String ;
var
  i : Integer;
begin
  i := Pos(#32,ss) ;
  if I = 0 then
  begin
    SArr[v] := ss ;
    Exit ;
  end
  else
  begin
    while (i = 1) do
    begin
      ss := Copy(ss,2,Length(ss)) ;
      i := Pos(#32,ss) ;
    end ;
    SArr[v] := Copy(ss,1,(i-1)) ;
    Inc(v) ;
    Delete(ss,1,i) ;
    FG(ss) ;
  end ;
end ;
procedure TForm1.Button1Click(Sender: TObject);
var
  s1,s : String ;
  k,i3,i2: Integer ;
   a:array [1..100] of string; //放所有行
   ReadFile:TextFile;
begin
 AssignFile(readfile,'8582.txt');
    reset(readfile);
    i2:=0; 
    while not eof(readfile)do
     begin
     readln(readfile,s1);
     i2:=i2+1;//对字符串条数计数
     a[i2]:=s1;
     end;  //话务报告传入数组a
     k:=1;//将数据放入stringgrid1
     for i3:=1 to i2 do
        begin
          v:=0;
          s:= a[i3];
          SetLength(SArr,Length(s)) ;
          S:= FG(s) ;
          if ((SArr[0]='DESTID') and  (SArr[1]='USAGE'))then
          begin
          v:=0;
          s:= a[i3+1];
          SetLength(SArr,Length(s)) ;
          S := FG(s) ;
            StringGrid1.Cells[0,k]:=sarr[0];
            StringGrid1.Cells[1,k]:=sarr[1];
            StringGrid1.Cells[2,k]:=sarr[2];
          v:=0;
           s:= a[i3+1];
          SetLength(SArr,Length(s)) ;
          S:= FG(s);
           StringGrid1.Cells[3,k]:=sarr[0];
          StringGrid1.Cells[4,k]:=sarr[1];
          StringGrid1.Cells[5,k]:=sarr[2];//stringgrid1中一行数据输入完毕
          inc(k);
            end
            else
            continue;
        end;
     end;
  end.
将形如
 DESTID  USAGE   ATTMPTS SEIZE   
        17908   2       1       1     
   
                CSLB    CSTB    CONG    
                0       0       0        的字段读stringgrid1中,但老是报错Access violation at adress 0040447c in module 'project2.exe',write of address of address 00000000 或是根本不运行!怎么回事?是我的程序有问题吗?麻烦各位帮我看看
另外请问wjlsmail(计算机质子)兄 Function FG(ss : String ) : String ;是你写的函数,算法已懂 
但调用语句仍不明白  var  s : String ;            S := FG(s);FG的返回值不是sarr吗?怎么能赋值给S字符串?
函数返回字符串怎么用?

解决方案 »

  1.   

    你的函数定义有问题,该象这样:
    function fg(ss:tring):sarr;
    begin
      setlength(Result,100);
    end;var
      cc:sarr;
    begin
      cc:=fg('ssssssss');
    end;
      

  2.   

    这个函数没有用返回值(也可以写为过程) ,只是为了递归结果保存在 SArr[v] 中,那天我试过的 . 
      

  3.   

    调用 :  s := '1234  3456 5678' ;
      SetLength(SArr,Length(s)) ;//初始化
      v := 0 ;
      FG(s) ;
      k := 0 ;
      for j := 0 to Length(s) -1 do //得到结果同时释放SArr 中多余的空间
      begin
        if SArr[j] <> '' then 
        begin    
          ShowMessage(SArr[j]) ;
          Inc(k) ;
      end ;
      SetLength(SArr,k) ;
      

  4.   

    再次麻烦 wjlsmail(计算机质子) 兄看一下 我的程序有什么问题呢?为什么专门出错?