📄 help-function.txt
字号:
begin
Halt(1); { Halt right here! }
end;
end;
end;
Canvas.TextOut(10, 10, 'This will not be executed');
end;
-----------------------------------------------------------------------------
RunError 停止程式执行且执行run-time error.
-----------------------------------------------------------------------------
Unit System
函数原型 procedure RunError [ ( Errorcode: Byte ) ];
范例 begin
{$IFDEF Debug}
if P = nil then
RunError(204);
{$ENDIF}
end;
=====================================
I/O routines I/O常式
=====================================
AssignFile 指定档案给一个档案变数.
-----------------------------------------------------------------------------
Unit System
函数原型 procedure AssignFile(var F; FileName: string);
说明 **一个档案不可重复执行AssignFile两次以上.
Example
var
F: TextFile;
S: string;
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(F, OpenDialog1.FileName); { File selected in dialog box }
Reset(F);
Readln(F, S); { Read the first line out of the file }
Edit1.Text := S; { Put string in a TEdit control }
CloseFile(F);
end;
end;
## AssignFile, OpenDialog, Readln, CloseFile Example
-----------------------------------------------------------------------------
CloseFile 关闭档案.
-----------------------------------------------------------------------------
Unit System
函数原型 procedure CloseFile(var F);
#### AssignFile, OpenDialog, Readln, CloseFile Example
-----------------------------------------------------------------------------
IOResult 传回最近一次执行I/O函数,是否有错误.
-----------------------------------------------------------------------------
Unit System
函数原型 function IOResult: Integer;
范例 var
F: file of Byte;
S: String;
begin
S:= 'c:\ka\aaa.txt';
AssignFile(F, S);
{$I-}
Reset(F);
{$I+}
if IOResult = 0 then
Label1.Caption:='File size in bytes: ' +
IntToStr(FileSize(F);
else
Label1.Caption:='开档失败';
end;
说明 传回0表示没有错误.
EXAMPLE
var
F: file of Byte;
begin
if OpenDialog1.Execute then begin
AssignFile(F, OpenDialog1.FileName);
{$I-}
Reset(F);
{$I+}
if IOResult = 0 then
MessageDlg('File size in bytes: ' + IntToStr(FileSize(F)),
mtInformation, [mbOk], 0)
else
MessageDlg('File access error', mtWarning, [mbOk], 0);
end;
end;
-----------------------------------------------------------------------------
Reset 开起一个可供读取的档案.
-----------------------------------------------------------------------------
Unit System
函数原型 procedure Reset(var F [: File; RecSize: Word ] );
-----------------------------------------------------------------------------
Rewrite 建立一个可供写入的新档案.
-----------------------------------------------------------------------------
Unit System
函数原型 procedure Rewrite(var F: File [; Recsize: Word ] );
范例 procedure TForm1.Button1Click(Sender: TObject);
var
F: TextFile;
I1,I2,I3:Integer;
S1,S2,S3:String;
begin
I1:=1234;
I2:=5678;
I3:=90;
S1:='abcd';
S2:='efgh';
S3:='ij';
AssignFile(F,'c:\ka\aaa.txt');
Rewrite(F);
Write(F,I1);
Write(F,I2);
Write(F,I3);
Write(F,S1);
Write(F,S2);
Write(F,S3);
Write(F,I1,I2,I3);
Write(F,S1,S2,S3);
Writeln(F,I1);
Writeln(F,I2);
Writeln(F,I3);
Writeln(F,S1);
Writeln(F,S2);
Writeln(F,S3);
Writeln(F,I1,I2,I3);
Writeln(F,S1,S2,S3);
Reset(F);
Readln(F, S1);
Readln(F, I1);
Label1.Caption:=S1+' '+IntToStr(I1);
CloseFile(F);
end;
结果 1234567890abcdefghij1234567890abcdefghij1234..
5678..
90..
abcd..
efgh..
ij..
1234567890..
abcdefghij..
abcdefghij..
以上是存档结果,两点代表#13#10,两个位元.
以Writeln存档者,多出换行符号#13#10.
且如果以Writeln(F,I1,I2,I3)会当成同一串列,
变数间没有间隔符号,造成Read时得不到预期的效果.
读取结果
S1=1234567890abcdefghij1234567890abcdefghij1234
长度44且不含#13#10两个位元.
I1=5678
** Write(F,I1:10:2,I2:8:2);
具有格式化的功能,如同Str.
范例 procedure TForm1.Button1Click(Sender: TObject);
var
F: file of Byte;
I1,I2,I3:Byte;
begin
I1:=16;
I2:=32;
I3:=48;
AssignFile(F,'c:\ka\aaa.txt');
Rewrite(F);
Write(F,I1);
Write(F,I2);
Write(F,I3);
Write(F,I1,I2,I3);
I1:=0;
Reset(F);
Read(F, I1);
Label1.Caption:=IntToStr(I1);
CloseFile(F);
end;
结果 file of Byte 及 file of record
只能以Write及Read,来写入及读取,
不可以Writeln及Readln.
范例 procedure TForm1.Button1Click(Sender: TObject);
type
ppRec = record
pp_No:String[5];
pp_Name:String[10];
pp_Age:Integer;
pp_Sum:Double;
end;
var
Rec : ppRec;
Rec2: ppRec;
F: file of ppRec;
begin
With Rec do
Begin
pp_No:='0001';
pp_Name:='abc';
pp_Age:=12;
pp_Sum:=600;
End;
AssignFile(F,'c:\ka\aaa.txt');
Rewrite(F);
Write(F,Rec);
Rec.pp_No:='0002';
Rec.pp_Sum:=58.2;
Write(F,Rec);
Rec.pp_No:='0003';
Rec.pp_Sum:=258.242;
Write(F,Rec);
seek(F,1);
Read(F,Rec2);
seek(F,1);
Truncate(F); {删除,只剩第0笔}
Canvas.TextOut(5,10,Rec2.pp_No);
Canvas.TextOut(5,30,Rec2.pp_Name);
Canvas.TextOut(5,50,Format('%d',[Rec2.pp_Age]));
Canvas.TextOut(5,70,Format('%f',[Rec2.pp_Sum]));
CloseFile(F);
end;
结果 pp_No存入6 Bytes
pp_Name存入11 Bytes
pp_Age存入4 Bytes(Integer 4 Bytes)
pp_Sum存入8 Bytes(Double 8 Bytes)
整个Record以16的倍数存档.
EXAMPLE
var F: TextFile;
begin
AssignFile(F, 'NEWFILE.$$$');
Rewrite(F);
Writeln(F, 'Just created file with this text in it...');
CloseFile(F);
end;
-----------------------------------------------------------------------------
Seek 移动档案指标.
-----------------------------------------------------------------------------
Unit System
函数原型 procedure Seek(var F; N: Longint);
说明 Seek从0开始.
Example
var
f: file of Byte;
size : Longint;
S: string;
y: Integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(f, OpenDialog1.FileName);
Reset(f);
size := FileSize(f);
S := 'File size in bytes: ' + IntToStr(size);
y := 10;
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
S := 'Seeking halfway into file...';
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
Seek(f,size div 2);
S := 'Position is now ' + IntToStr(FilePos(f));
Canvas.TextOut(5, y, S);
CloseFile(f);
end;
end;
## FileSize, Seek, FilePos Example
-----------------------------------------------------------------------------
Truncate 将目前档案指标位置之後的档案内容全部删除.
-----------------------------------------------------------------------------
Unit System
函数原型 procedure Truncate(var F);
范例
var
f: file of Integer;
i,j: Integer;
begin
AssignFile(f,'TEST.INT');
Rewrite(f);
for i := 1 to 6 do
Write(f,i);
Writeln('File before truncation:');
Reset(f);
while not Eof(f) do
begin
Read(f,i);
Writeln(i);
end;
Reset(f);
for i := 1 to 3 do
Read(f,j); { Read ahead 3 records }
Truncate(f); { Cut file off here }
Writeln;
Writeln('File after truncation:');
Reset(f);
while not Eof(f) do
begin
Read(f,i);
Writeln(i);
end;
CloseFile(f);
Erase(f);
end;
-----------------------------------------------------------------------------
FilePos 传回目前档案的位置.
-----------------------------------------------------------------------------
Unit System
函数原型 function FilePos(var F): Longint
说明 F 不可为 Text File
档头 :FilePos(F):=0;
档尾 :Eof(F):=True;
范例 var
f: file of Byte;
S: string;
begin
S:= 'c:\ka\abc.txt';
AssignFile(f, S);
Reset(f);
Seek(f,1);
Label1.Caption := '现在位置 : ' + IntToStr(FilePos(f));
end;
Example
var
f: file of Byte;
size : Longint;
S: string;
y: Integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(f, OpenDialog1.FileName);
Reset(f);
size := FileSize(f);
S := 'File size in bytes: ' + IntToStr(size);
y := 10;
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
S := 'Seeking halfway into file...';
Canvas.TextOut(5, y, S);
y := y + Canvas.TextHeight(S) + 5;
Seek(f,size div 2);
S := 'Position is now ' + IntToStr(FilePos(f));
Canvas.TextOut(5, y, S);
CloseFile(f);
end;
end;
##FileSize, Seek, FilePos Example
-----------------------------------------------------------------------------
FileSize 档案长度.
-----------------------------------------------------------------------------
Unit System
函数原型 function FileSize(var F): Integer;
说明 F 不可为 Text File
如果F为record file,则传回record数,
否则传回Byte数.
## FileSize, Seek, FilePos Example
-----------------------------------------------------------------------------
Eof 测试档案是否结束.
-----------------------------------------------------------------------------
Unit System
函数原型 function Eof(var F): Boolean;
函数原型 function Eof [ (var F: Text) ]: Boolean;
范例 var
F1, F2: TextFile;
Ch: Char;
begin
if OpenDialog1.Execute then
begin
AssignFile(F1, OpenDialog1.Filename);
Reset(F1);
if SaveDialog1.Execute then
begin
AssignFile(F2, OpenDialog1.Filename);
Rewrite(F2);
while not Eof(F1) do
begin
Read(F1, Ch);
Write(F2, Ch);
end;
CloseFile(F2);
end;
CloseFile(F1);
end;
end;
Example
var
F1, F2: TextFile;
Ch: Char;
begin
if OpenDialog1.Execute then begin
AssignFile(F1, OpenDialog1.Filename);
Reset(F1);
if SaveDialog1.Execute then begin
AssignFile(F2, SaveDialog1.Filename);
Rewrite(F2);
while not Eof(F1) do
begin
Read(F1, Ch);
Write(F2, Ch);
end;
CloseFile(F2);
end;
CloseFile(F1);
end;
end;
--------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -