2024年4月30日发(作者:)
Delphi文本文件读写
Delphi支持三种文件类型:文本文件、记录文件、无类型文件。
文本文件是以行为单位进行读、写的。由于每一行的长度不一定相同,不能计算出给定行在
文件中的确切位置,因而只能顺序地读写。
文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许
的。
文本文件的打开需要两个步骤:1.文件变量与文件名关联;2.初始化读写。
1.文件变量与文件名关联:
AssignFile(VarTxt,FileName);
FileName如果省略路径将默认当前目录。
2.初始化读写有三种方式:
(1)Reset:只读打开,指针移到文件头;
(2)Rewrite:创建新文件并打开,只写;
(3)Append:从尾部追加,指针当然在文件尾。
文件不存在时使用Reset或Append会引发一个I/O异常。
最后用CloseFile关闭文件。
为保持兼容,Delphi也允许用户用Assign建立关联,用Close关闭文件。
--------------------------------------------------------------------------------
//读写示例:
unitUnit1;
interface
usesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
StdCtrls;
typeTForm1=class(TForm)
Memo1:TMemo;
Button1:TButton;
Button2:TButton;
Button3:TButton;
Button4:TButton;
Button5:TButton;
Button6:TButton;
Button7:TButton;
Dialogs,
procedureButton1Click(Sender:TObject);
procedureButton2Click(Sender:TObject);
procedureButton3Click(Sender:TObject);
procedureButton4Click(Sender:TObject);
procedureButton5Click(Sender:TObject);
procedureButton6Click(Sender:TObject);
procedureButton7Click(Sender:TObject);
private{Privatedeclarations}
public{Publicdeclarations}
end;
varForm1:TForm1;
implementation
{$R*.dfm}
var
F:Text;//TextFile和Text是一样的
FileName:string='c:';
//写文件
1Click(Sender:TObject);
begin
AssignFile(F,FileName);
Rewrite(F);//会覆盖已存在的文件
Writeln(F,'第一行');
Writeln(F,'第二行');
CloseFile(F);
end;
//读文件(先执行写文件)
2Click(Sender:TObject);
var
s:string;
begin
AssignFile(F,FileName);
Reset(F);//只读打开
Readln(F,s);//读取
ShowMessage(s);//显示:第一行
Readln(F,s);//继续读取
ShowMessage(s);//显示:第二行
CloseFile(F);
end;
//追加
3Click(Sender:TObject);
begin
AssignFile(F,FileName);
Append(F);//打开准备追加
Writeln(F,'第三行');
Writeln(F,'第四行');
CloseFile(F);
end;
//读取全部(需要Memo帮忙显示)
4Click(Sender:TObject);
var
s:string;
begin
AssignFile(F,FileName);
Reset(F);//只读打开
;
whilenotEof(F)do
begin
Readln(F,s);
(s);
end;
CloseFile(F);
end;
//分列写入
5Click(Sender:TObject);
凑够n的长度
functionAddSpace(s:string;n:Word):string;
begin
whileLength(s) begin s:=s+''; end; Result:=s; end; var name:string[8]; address:string[16]; begin AssignFile(F,FileName); Rewrite(F); name:='张三'; name:=AddSpace(name,8); address:='山东泰安'; address:=AddSpace(address,16); Writeln(F,name,address); name:='李四儿'; name:=AddSpace(name,8); //这个过程级函数的功能是:用空格把s address:='贵州省安顺黄果树'; address:=AddSpace(address,16); Writeln(F,name,address); name:='王二麻子'; name:=AddSpace(name,8); address:=AddSpace(address,16); Writeln(F,name,address); CloseFile(F); {写入的结果是:张三山东泰安李四儿贵州省安顺黄果树 区} end; //分列读取 6Click(Sender:TObject); varname:string[8]; address:string[16]; begin AssignFile(F,FileName); Reset(F); ; whilenotEof(F)do begin Readln(F,name); (name); end; CloseFile(F); Reset(F); whilenotEof(F)do begin Readln(F,name,address); (address); end; CloseFile(F); {读取结果:张三李四儿王二麻子山东泰安 北京市海淀区} end; //不同数据类型的写入和读取 7Click(Sender:TObject); varname:string[6]; age:Word; birthday:TDate; 王二麻子北京市海淀 贵州省安顺黄果树 begin AssignFile(F,FileName); Rewrite(F); name:='菜花';//加两个空格凑够6个字符 age:=18; birthday:=StrToDate(DateToStr(Now-18*365)); Writeln(F,name,age,birthday); CloseFile(F); Reset(F); Readln(F,name,age,birthday); ; (name); (IntToStr(age)); (DateToStr(birthday)); CloseFile(F); {读取结果:菜花181989-12-23} //假如她今天过生日 //其实这样的东西应该用类型文件操作更合适,但如果有这样的文本文件让你读取呢? end; end.


发布评论