读出时是一堆乱码,我到底错在哪儿?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
StringGrid1: TStringGrid;
Edit2: TEdit;
Button2: TButton;
Edit3: TEdit;
Edit4: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TestRec = record
test1: string;
test2: string;
test3: single;
end; TestRecord = record
test1: string;
test2: array of TestRec;
end;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
i, j: integer;
testStream: TFileStream;
Test: TestRecord;
begin
Setlength(Test.test2, 3);
test.test1 := '头信息';
for i := Low(Test.test2) to High(Test.test2) do
begin
Test.test2[i].test1 := 'test1';
Test.test2[i].test2 := 'test2';
Test.test2[i].test3 := 3.2;
end;
testStream := TFileStream.Create('c:\test.txt', fmCreate);
j := High(Test.test2) + 1;
edit3.Text := inttostr(j);
testStream.Position := 0;
testStream.Write(j, sizeof(j));
testStream.Write(test.test1, Sizeof(test.test1));
for I := Low(test.test2) to High(test.test2) do
testStream.Write(test.test2[I], SizeOf(Test.test2[I])); FreeAndNil(testStream);end;procedure TForm1.Button2Click(Sender: TObject);
var
i, j: integer;
testStream: TFileStream;
TestOpen: TestRecord;
begin
testStream := TFileStream.Create('c:\test.txt', fmOpenRead);
testStream.Position := 0;
testStream.Read(j, sizeof(j));
testStream.Read(TestOpen.test1, sizeOf(TestOpen.test1));
Setlength(TestOpen.test2, j);
for i := low(TestOpen.test2) to High(TestOpen.test2) do
begin
testStream.Read(TestOpen.test2[i], SizeOf(TestOpen.test2[I]));
j:=1;
end; FreeAndNil(testStream);
Edit1.Text := TestOpen.test1;
edit4.Text := inttostr(j);
for i := 0 to StringGrid1.RowCount - 1 do
begin
StringGrid1.Cells[1, i + 1] := '';
StringGrid1.Cells[2, i + 1] := '';
StringGrid1.Cells[3, i + 1] := '';
end;
for i := Low(TestOpen.test2) to High(TestOpen.test2) do
begin
StringGrid1.Cells[1, i + 1] := TestOpen.test2[i].test1;
StringGrid1.Cells[2, i + 1] := TestOpen.test2[i].test2;
StringGrid1.Cells[3, i + 1] := FormatFloat('0.00', TestOpen.test2[i].test3);
end;
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
StringGrid1: TStringGrid;
Edit2: TEdit;
Button2: TButton;
Edit3: TEdit;
Edit4: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TestRec = record
test1: string;
test2: string;
test3: single;
end; TestRecord = record
test1: string;
test2: array of TestRec;
end;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
i, j: integer;
testStream: TFileStream;
Test: TestRecord;
begin
Setlength(Test.test2, 3);
test.test1 := '头信息';
for i := Low(Test.test2) to High(Test.test2) do
begin
Test.test2[i].test1 := 'test1';
Test.test2[i].test2 := 'test2';
Test.test2[i].test3 := 3.2;
end;
testStream := TFileStream.Create('c:\test.txt', fmCreate);
j := High(Test.test2) + 1;
edit3.Text := inttostr(j);
testStream.Position := 0;
testStream.Write(j, sizeof(j));
testStream.Write(test.test1, Sizeof(test.test1));
for I := Low(test.test2) to High(test.test2) do
testStream.Write(test.test2[I], SizeOf(Test.test2[I])); FreeAndNil(testStream);end;procedure TForm1.Button2Click(Sender: TObject);
var
i, j: integer;
testStream: TFileStream;
TestOpen: TestRecord;
begin
testStream := TFileStream.Create('c:\test.txt', fmOpenRead);
testStream.Position := 0;
testStream.Read(j, sizeof(j));
testStream.Read(TestOpen.test1, sizeOf(TestOpen.test1));
Setlength(TestOpen.test2, j);
for i := low(TestOpen.test2) to High(TestOpen.test2) do
begin
testStream.Read(TestOpen.test2[i], SizeOf(TestOpen.test2[I]));
j:=1;
end; FreeAndNil(testStream);
Edit1.Text := TestOpen.test1;
edit4.Text := inttostr(j);
for i := 0 to StringGrid1.RowCount - 1 do
begin
StringGrid1.Cells[1, i + 1] := '';
StringGrid1.Cells[2, i + 1] := '';
StringGrid1.Cells[3, i + 1] := '';
end;
for i := Low(TestOpen.test2) to High(TestOpen.test2) do
begin
StringGrid1.Cells[1, i + 1] := TestOpen.test2[i].test1;
StringGrid1.Cells[2, i + 1] := TestOpen.test2[i].test2;
StringGrid1.Cells[3, i + 1] := FormatFloat('0.00', TestOpen.test2[i].test3);
end;
end;end.
解决方案 »
- 用idhttp怎么发送分段表单?
- 恶心多年,终于还是忍不住了
- 已经没有分了,不是我吝啬!如何判断图片类型
- 如何模拟win+D组合键,让所有窗体最小化?
- 巨难问题:如何在Windows2000/xp中取得或设置本机计算机的工作组?
- 如何在richEdit中将光标定位在某行的某列下?急!
- 怎样使主菜单成为泊位菜单!
- 关于web server application中连数据库出错的问题,解决过这种问题的高手帮忙啊!急...
- 怎样确定一个字段的值是不是空
- 求救!!!获得IP......
- 问一下大家,用什么方法可以让程序在运行期间处于不可操作状态!
- delphi中象qq中的分组按纽怎么做的,有什么控件吗?
procedure TForm1.Button1Click(Sender: TObject);
var
len,i, j: integer;
testStream: TFileStream;
Test: TestRecord;
begin
Setlength(Test.test2, 3);
test.test1 := '头信息';
for i := Low(Test.test2) to High(Test.test2) do
begin
Test.test2[i].test1 := 'test1';
Test.test2[i].test2 := 'test2';
Test.test2[i].test3 := 3.2;
end;
testStream := TFileStream.Create('c:\test.txt', fmCreate);
j := High(Test.test2) + 1;
edit3.Text := inttostr(j);
testStream.Position := 0;
testStream.Write(j, sizeof(j));
len:=length(test.test1);
testStream.Write(len,sizeof(len));
testStream.Write(test.test1[1], len); for I := Low(test.test2) to High(test.test2) do
begin
len:=length(test.test2[i].test1);
testStream.Write(len,sizeof(len));
testStream.Write(test.test2[i].test1[1], len);
len:=length(test.test2[i].test2);
testStream.Write(len,sizeof(len));
testStream.Write(test.test2[i].test2[1], len);
testStream.Write(test.test2[i].test3, sizeof(test.test2[i].test3));
end;
FreeAndNil(testStream); end;procedure TForm1.Button2Click(Sender: TObject);
var
i, j,len: integer;
testStream: TFileStream;
TestOpen: TestRecord;
begin
testStream := TFileStream.Create('c:\test.txt', fmOpenRead);
testStream.Position := 0;
testStream.Read(j, sizeof(j));
testStream.Read(len, sizeof(len));
setlength(testOpen.test1,len);
testStream.Read(TestOpen.test1[1], len);
Setlength(TestOpen.test2, j);
i:=0;
for i := low(TestOpen.test2) to High(TestOpen.test2) do
begin
testStream.Read(len, sizeof(len));
Setlength(TestOpen.test2[i].test1,len);
testStream.Read(TestOpen.test2[i].test1[1], len);
testStream.Read(len, sizeof(len));
Setlength(TestOpen.test2[i].test2,len);
testStream.Read(TestOpen.test2[i].test2[1], len);
testStream.Read(TestOpen.test2[i].test3, sizeof(TestOpen.test2[i].test3)); end; FreeAndNil(testStream);
Edit1.Text := TestOpen.test1;
edit4.Text := inttostr(j);
for i := 0 to StringGrid1.RowCount - 1 do
begin
StringGrid1.Cells[1, i + 1] := '';
StringGrid1.Cells[2, i + 1] := '';
StringGrid1.Cells[3, i + 1] := '';
end;
for i := Low(TestOpen.test2) to High(TestOpen.test2) do
begin
StringGrid1.Cells[1, i + 1] := TestOpen.test2[i].test1;
StringGrid1.Cells[2, i + 1] := TestOpen.test2[i].test2;
StringGrid1.Cells[3, i + 1] := FormatFloat('0.00', TestOpen.test2[i].test3);
end;
end;
TestRec = record
test1: string[255];
test2: string[255];
test3: single[255];
end;
TestRecord = record
test1: string[255];
test2: array of TestRec;
end;
test1: string[255];
test2: string[255];
test3: single[255];
end;
TestRecord = record
test1: string[255];
test2: array of TestRec;
end;
用TFileStream不如用Textfile更簡易。