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. 

解决方案 »

  1.   

    换成XML存储?
    否则就只能老老实实读取了
      

  2.   

    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. 
      

  3.   

    不错~~~应该再加些ini加密技术就更完美了~~~