delphi txt文件读写

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值