首页  编辑  

stringgrid从文本读入的问题

Tags: /超级猛料/VCL/Grid控件/   Date Created:

Save/Load a TStringGrid to/from a file?

// Save a TStringGrid to a file

procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);

var

 f:    TextFile;

 i, k: Integer;

begin

 AssignFile(f, FileName);

 Rewrite(f);

 with StringGrid do

 begin

   // Write number of Columns/Rows

   Writeln(f, ColCount);

   Writeln(f, RowCount);

   // loop through cells

   for i := 0 to ColCount - 1 do

     for k := 0 to RowCount - 1 do

       Writeln(F, Cells[i, k]);

 end;

 CloseFile(F);

end;

// Load a TStringGrid from a file

procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);

var

 f:          TextFile;

 iTmp, i, k: Integer;

 strTemp:    String;

begin

 AssignFile(f, FileName);

 Reset(f);

 with StringGrid do

 begin

   // Get number of columns

   Readln(f, iTmp);

   ColCount := iTmp;

   // Get number of rows

   Readln(f, iTmp);

   RowCount := iTmp;

   // loop through cells & fill in values

   for i := 0 to ColCount - 1 do

     for k := 0 to RowCount - 1 do

     begin

       Readln(f, strTemp);

       Cells[i, k] := strTemp;

     end;

 end;

 CloseFile(f);

end;

// Save StringGrid1 to 'c:\temp.txt':

procedure TForm1.Button1Click(Sender: TObject);

begin

 SaveStringGrid(StringGrid1, 'c:\temp.txt');

end;

// Load StringGrid1 from 'c:\temp.txt':

procedure TForm1.Button2Click(Sender: TObject);

begin

 LoadStringGrid(StringGrid1, 'c:\temp.txt');

end;

*******************************************

打开一个已有的文本文件,并将内容放到stringgrid中,

文本行与stringgrid行一致;

在文本中遇到空格则放入下一cells.

搞定!注意,我只写了一个空格间隔的,你自己修改一下splitstring可以用多个空格分隔!

procedure TForm1.Button1Click(Sender: TObject);

var

 aa,bb:tstringlist;

 i:integer;

begin

aa:=tstringlist.Create;

bb:=tstringlist.Create;

aa.LoadFromFile('c:\windows\desktop\aa.txt');

for i:=0 to aa.Count-1 do

begin

bb:=SplitString(aa.Strings[i],' ');

stringgrid1.Rows[i]:=bb;

end;

aa.Free;

bb.Free;

end;

其中splitstring为:

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;