怎样将不同Tstringgrid的内容通过Tfilestream写入一个文件中,并能够从这一个Tfilestream生成的文件分别读到相应的Tstringgrid?(现在已经能够实现一个Tstringgrid的写入和读入),拜托高手了单个Tstringgrid的存入和读出我分别这样实现的
//-------------以下是存入
procedure TForm1.BitBtn2Click(Sender: TObject);
var st:TFileStream;
i,len:integer;
begin
st:=TFileStream.Create('test.bin',fmcreate);
with StringGrid1 do
begin
st.Write(RowCount,sizeof(RowCount));
st.Write(ColCount,sizeof(ColCount));
for i:=0 to RowCount-1 do
begin
len:=Length(Rows[i].Text);
st.Write(len,sizeof(len));
st.Write(Rows[i].Text[1],len);
end;
end;
st.Free;end;
///----------------------以下是读出
procedure TForm1.BitBtn3Click(Sender: TObject);
var st:TFileStream;
i,len:integer;
S:string; ro,co:integer;
begin
st:=TFileStream.Create('test.bin',fmOpenRead);
with StringGrid1 do
begin
st.Read(ro,sizeof(ro));
st.Read(co,sizeof(co));
RowCount:=ro;
ColCount:=co;
for i:=0 to RowCount-1 do
begin
st.Read(len,sizeof(len));
Setlength(S,len);
st.Read(S[1],len);
Rows[i].Text:=S;
end;
end;
st.Free;
end;
//------
我怎么修改上述代码能实现我所说的功能?
//-------------以下是存入
procedure TForm1.BitBtn2Click(Sender: TObject);
var st:TFileStream;
i,len:integer;
begin
st:=TFileStream.Create('test.bin',fmcreate);
with StringGrid1 do
begin
st.Write(RowCount,sizeof(RowCount));
st.Write(ColCount,sizeof(ColCount));
for i:=0 to RowCount-1 do
begin
len:=Length(Rows[i].Text);
st.Write(len,sizeof(len));
st.Write(Rows[i].Text[1],len);
end;
end;
st.Free;end;
///----------------------以下是读出
procedure TForm1.BitBtn3Click(Sender: TObject);
var st:TFileStream;
i,len:integer;
S:string; ro,co:integer;
begin
st:=TFileStream.Create('test.bin',fmOpenRead);
with StringGrid1 do
begin
st.Read(ro,sizeof(ro));
st.Read(co,sizeof(co));
RowCount:=ro;
ColCount:=co;
for i:=0 to RowCount-1 do
begin
st.Read(len,sizeof(len));
Setlength(S,len);
st.Read(S[1],len);
Rows[i].Text:=S;
end;
end;
st.Free;
end;
//------
我怎么修改上述代码能实现我所说的功能?
方法一:每个Tstringgrid写一个文件。
方法二:如你所用的方法一样:建一个文件头,写上Tstringgrid的名字,标志,甚至大小等。
写完一个Tstringgrid,再写第二个Tstringgrid。
读完第一个,再读第二个。或者在文件头中建一个Tstringgrid的索引,写上每个Tstringgrid的位置,那读的时候就更快一些。
var
st: TFileStream;
i, len: integer;
iCount, K: integer; //
cp: TComponent;
begin
st := TFileStream.Create('test.bin', fmcreate);
iCount := 3; //假設是3個, 分別為 StringGrid1, StringGrid2, ...
st.Write(iCount, SizeOf(Integer));
for k := 1 to iCount do
begin
with TStringGrid(FindComponent('STringGrid' + IntToStr(k))) do
begin
st.Write(RowCount, sizeof(RowCount));
st.Write(ColCount, sizeof(ColCount));
for i := 0 to RowCount - 1 do
begin
len := Length(Rows[i].Text);
st.Write(len, sizeof(len));
st.Write(Rows[i].Text[1], len);
end;
end;
end;
st.Free;
end;procedure TForm1.Button2Click(Sender: TObject);
var
st: TFileStream;
i, len: integer;
S: string;
ro, co: integer;
iCount, K: integer;
begin
st := TFileStream.Create('test.bin', fmOpenRead);
st.Read(icount, sizeOf(integer));
for K := 1 to iCount do
begin
with TStringGrid(FindComponent('STringGrid' + IntToStr(k))) do
begin
st.Read(ro, sizeof(ro));
st.Read(co, sizeof(co));
RowCount := ro;
ColCount := co;
for i := 0 to RowCount - 1 do
begin
st.Read(len, sizeof(len));
Setlength(S, len);
st.Read(S[1], len);
Rows[i].Text := S;
end;
end;
end;
st.Free;
end;