• 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 := '北京市海淀区';
    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.


  • 相关阅读:
    xls与csv文件的区别
    青音,经典爱情语录
    win7用户账户自动登录方法汇总
    How to using Procedure found Lead Blocker
    FTS(3) BSD 库函数手册 遍历文件夹(二)
    FTS(3) BSD 库函数手册 遍历文件夹(一)
    DisplayMetrics类 获取手机显示屏的基本信息 包括尺寸、密度、字体缩放等信息
    About App Distribution 关于应用发布
    FTS(3) 遍历文件夹实例
    OpenCV 2.1.0 with Visual Studio 2008
  • 原文地址:https://www.cnblogs.com/ntearn/p/1339736.html
Copyright © 2020-2023  润新知