Delphi文本文件读写

gyz1981 2008-12-03 03:42:38
Delphi文本文件读写

Delphi 支持三种文件类型: 文本文件、记录文件、无类型文件。

文本文件是以行为单位进行读、写的。由于每一行的长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。

文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。

文本文件的打开需要两个步骤:1.文件变量与文件名关联;2.初始化读写。

1.文件变量与文件名关联:
AssignFile(VarTxt, FileName);
FileName 如果省略路径将默认当前目录。

2.初始化读写有三种方式:
(1) Reset: 只读打开, 指针移到文件头;
(2) Rewrite: 创建新文件并打开, 只写;
(3) Append: 从尾部追加, 指针当然在文件尾。

文件不存在时使用 Reset 或 Append 会引发一个I/O异常。

最后用 CloseFile 关闭文件。

为保持兼容,Delphi 也允许用户用 Assign 建立关联, 用 Close 关闭文件。

--------------------------------------------------------------------------------


//读写示例:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
var F: Text; //TextFile 和 Text 是一样的 FileName: string = 'c:\temp\test.txt';
//写文件procedure TForm1.Button1Click(Sender: TObject);begin AssignFile(F,FileName); Rewrite(F); //会覆盖已存在的文件
Writeln(F, '第一行'); Writeln(F, '第二行');
CloseFile(F);end;
//读文件(先执行写文件)procedure TForm1.Button2Click(Sender: TObject);var s: string;begin AssignFile(F,FileName); Reset(F); //只读打开
Readln(F, s); //读取 ShowMessage(s); //显示: 第一行 Readln(F, s); //继续读取 ShowMessage(s); //显示: 第二行
CloseFile(F);end;
//追加procedure TForm1.Button3Click(Sender: TObject);begin AssignFile(F,FileName); Append(F); //打开准备追加
Writeln(F, '第三行'); Writeln(F, '第四行');
CloseFile(F);end;
//读取全部(需要Memo帮忙显示)procedure TForm1.Button4Click(Sender: TObject);var s: string;begin AssignFile(F,FileName); Reset(F); //只读打开
Memo1.Clear; while not Eof(F) do begin Readln(F, s); Memo1.Lines.Add(s); end;
CloseFile(F);end;
//分列写入procedure TForm1.Button5Click(Sender: TObject); //这个过程级函数的功能是: 用空格把 s 凑够 n 的长度 function AddSpace(s: string; n: Word): string; begin while Length(s) < n do 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); 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;
//分列读取procedure TForm1.Button6Click(Sender: TObject);var name: string[8]; address: string[16];begin AssignFile(F, FileName); Reset(F);
Memo1.Clear; while not Eof(F) do begin Readln(F, name); Memo1.Lines.Add(name); end;
CloseFile(F); Reset(F);
while not Eof(F) do begin Readln(F, name, address); Memo1.Lines.Add(address); end;
CloseFile(F);{读取结果: 张三 李四儿 王二麻子 山东泰安 贵州省安顺黄果树 北京市海淀区 }end;
//不同数据类型的写入和读取procedure TForm1.Button7Click(Sender: TObject);var name: 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); Memo1.Clear; Memo1.Lines.Add(name); Memo1.Lines.Add(IntToStr(age)); Memo1.Lines.Add(DateToStr(birthday));
CloseFile(F);
{读取结果: 菜花 18 1989-12-23}//其实这样的东西应该用类型文件操作更合适, 但如果有这样的文本文件让你读取呢?end;
end.
...全文
1289 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq670016749 2011-05-20
  • 打赏
  • 举报
回复
高手,代码那么多
疯狂的犹太人 2011-05-20
  • 打赏
  • 举报
回复
学到了
de410 2008-12-10
  • 打赏
  • 举报
回复
不错~~~应该再加些ini加密技术就更完美了~~~
guanghui_10 2008-12-10
  • 打赏
  • 举报
回复
新手,学习中。。。。
gyz1981 2008-12-03
  • 打赏
  • 举报
回复
Delphi文本文件读写

Delphi文本文件读写 (2008-10-31 19:07:22)
标签:delphi it 分类:Delphi技术交流区

Delphi 支持三种文件类型: 文本文件、记录文件、无类型文件。

文本文件是以行为单位进行读、写的。由于每一行的长度不一定相同,不能计算出给定行在文件中的确切位置,因而只能顺序地读写。

文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。

文本文件的打开需要两个步骤:1.文件变量与文件名关联;2.初始化读写。

1.文件变量与文件名关联:
AssignFile(VarTxt, FileName);
FileName 如果省略路径将默认当前目录。

2.初始化读写有三种方式:
(1) Reset: 只读打开, 指针移到文件头;
(2) Rewrite: 创建新文件并打开, 只写;
(3) Append: 从尾部追加, 指针当然在文件尾。

文件不存在时使用 Reset 或 Append 会引发一个I/O异常。

最后用 CloseFile 关闭文件。

为保持兼容,Delphi 也允许用户用 Assign 建立关联, 用 Close 关闭文件。

--------------------------------------------------------------------------------


//读写示例:
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;

var Form1: TForm1;
implementation
{$R *.dfm}
var
F: Text; //TextFile 和 Text 是一样的
FileName: string = 'c:\temp\test.txt';
//写文件
procedure TForm1.Button1Click(Sender: TObject);
begin
AssignFile(F,FileName);
Rewrite(F); //会覆盖已存在的文件
Writeln(F, '第一行');
Writeln(F, '第二行');
CloseFile(F);
end;
//读文件(先执行写文件)
procedure TForm1.Button2Click(Sender: TObject);
var
s: string;
begin
AssignFile(F,FileName);
Reset(F); //只读打开
Readln(F, s); //读取
ShowMessage(s); //显示: 第一行
Readln(F, s); //继续读取
ShowMessage(s); //显示: 第二行
CloseFile(F);
end;
//追加
procedure TForm1.Button3Click(Sender: TObject);
begin
AssignFile(F,FileName);
Append(F); //打开准备追加
Writeln(F, '第三行');
Writeln(F, '第四行');
CloseFile(F);
end;
//读取全部(需要Memo帮忙显示)
procedure TForm1.Button4Click(Sender: TObject);
var
s: string;
begin
AssignFile(F,FileName);
Reset(F); //只读打开
Memo1.Clear;
while not Eof(F) do
begin
Readln(F, s);
Memo1.Lines.Add(s);
end;
CloseFile(F);
end;
//分列写入
procedure TForm1.Button5Click(Sender: TObject); //这个过程级函数的功能是: 用空格把 s 凑够 n 的长度

function AddSpace(s: string; n: Word): string;
begin
while Length(s) < n do
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);
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;
//分列读取
procedure TForm1.Button6Click(Sender: TObject);
var name: string[8];
address: string[16];
begin
AssignFile(F, FileName);
Reset(F);
Memo1.Clear;
while not Eof(F) do
begin
Readln(F, name);
Memo1.Lines.Add(name);
end;
CloseFile(F);
Reset(F);
while not Eof(F) do
begin
Readln(F, name, address);
Memo1.Lines.Add(address);
end;
CloseFile(F);

{读取结果: 张三 李四儿 王二麻子 山东泰安 贵州省安顺黄果树 北京市海淀区 }
end;
//不同数据类型的写入和读取
procedure TForm1.Button7Click(Sender: TObject);
var name: 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);
Memo1.Clear;
Memo1.Lines.Add(name);
Memo1.Lines.Add(IntToStr(age));
Memo1.Lines.Add(DateToStr(birthday));
CloseFile(F);

{读取结果: 菜花 18 1989-12-23}

//其实这样的东西应该用类型文件操作更合适, 但如果有这样的文本文件让你读取呢?

end;
end.
byteh 2008-12-03
  • 打赏
  • 举报
回复
换成XML存储?
否则就只能老老实实读取了
才子鸣 2008-12-03
  • 打赏
  • 举报
回复
你这个。。。太乱了点吧?谁看得清?

这里不是有插入代码功能吗??

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧