`
free_bird816
  • 浏览: 197392 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

结构化文件存取

阅读更多

纲要:
AssignFile: 关联
Rewrite: 创建并打开一个新文件, 如已存在则覆盖
Reset: 打开已存在的文件; 追加也要用它先打开, 然后再移动指针; Append 是文本文件专用的
CloseFile: 关闭

FileSize: 记录数
FilePos: 返回文件的当前位置
Seek: 把文件指针移到指定位置(只用于结构化文件)
Eof: 文件尾

Read: 读
Write: 写

另外: 包含长字符串、变量、类实例、接口或动态数组的记录不能写入类型文件中!


//操作示例:
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;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  TPersonRec = packed record
    name: string[12];
    age: Word;
    birthday: TDate;
  end; //先定义一个结构

var
  DataFile: file of TPersonRec;  //声明 DataFile 用来读写 TPersonRec 结构数据
  PersonRec: TPersonRec;  //声明结构变量
  FileName: string = 'c:\temp\test.dat';  //准备操作的文件


//创建并写入文件
procedure TForm1.Button1Click(Sender: TObject);
begin
  AssignFile(DataFile,FileName);  //关联文件
  Rewrite(DataFile);  //建立文件, 如果存在就覆盖

  PersonRec.name := '张三';
  PersonRec.age := 18;
  PersonRec.birthday := StrToDate('1990-1-1');
  Write(DataFile,PersonRec);  //写入

  PersonRec.name := '李四儿';
  PersonRec.age := 81;
  PersonRec.birthday := StrToDate('1927-11-11');
  Write(DataFile,PersonRec);  //写入

  CloseFile(DataFile);  //关闭
end;


//追加数据
procedure TForm1.Button2Click(Sender: TObject);
begin
  AssignFile(DataFile,FileName);
  Reset(DataFile);  //Append 只对文本文件
  Seek(DataFile,FileSize(DataFile));  //移到文件尾, 这里的 FileSize 表示有多少条记录

  PersonRec.name := '王二麻子';
  PersonRec.age := 1;
  PersonRec.birthday := StrToDate('2006-12-19');
  Write(DataFile,PersonRec);

  PersonRec.name := '嫦娥';
  PersonRec.age := 2000;
  PersonRec.birthday := StrToDate('0007-7-7');
  Write(DataFile,PersonRec);

  CloseFile(DataFile);

end;


//读取数据(用Memo显示数据吧)
procedure TForm1.Button3Click(Sender: TObject);
begin
  AssignFile(DataFile,FileName);
  Reset(DataFile);

  Memo1.Clear;
  Read(DataFile,PersonRec);  //读取一条, 指针自动移到下一条
  Memo1.Lines.Add(PersonRec.name);
  Memo1.Lines.Add(IntToStr(PersonRec.age));
  Memo1.Lines.Add(DateToStr(PersonRec.birthday));

  Read(DataFile,PersonRec);  //读取下一条
  Memo1.Lines.Add(PersonRec.name);
  Memo1.Lines.Add(IntToStr(PersonRec.age));
  Memo1.Lines.Add(DateToStr(PersonRec.birthday));

  Seek(DataFile,FileSize(DataFile)-1);  //指针移到最好一条
  Read(DataFile,PersonRec);
  Memo1.Lines.Add(PersonRec.name);
  Memo1.Lines.Add(IntToStr(PersonRec.age));
  Memo1.Lines.Add(DateToStr(PersonRec.birthday));

  CloseFile(DataFile);

{显示结果:
  张三
  18
  1990-1-1
  李四儿
  81
  1927-11-11
  嫦娥
  2000
  0007-7-7
}
end;


//修改数据
procedure TForm1.Button4Click(Sender: TObject);
begin
  AssignFile(DataFile,FileName);
  Reset(DataFile);

  Seek(DataFile,3);  //指针移到第四条
  Read(DataFile,PersonRec);  //读取
  PersonRec.age := 0;
  PersonRec.birthday := StrToDate('2007-10-24');

  Seek(DataFile,3);  //指针移到第四条
  Write(DataFile,PersonRec);  //写入

  CloseFile(DataFile);
end;


//读取所有数据
procedure TForm1.Button5Click(Sender: TObject);
begin
  AssignFile(DataFile,FileName);
  Reset(DataFile);

  Memo1.Clear;
  while not Eof(DataFile) do
  begin
    Memo1.Lines.Add('第 ' + IntToStr(FilePos(DataFile)+1) + ' 条:');
    Read(DataFile,PersonRec);
    Memo1.Lines.Add(PersonRec.name);
    Memo1.Lines.Add(IntToStr(PersonRec.age));
    Memo1.Lines.Add(DateToStr(PersonRec.birthday));
    Memo1.Lines.Add('');  //来个空行
  end;

  CloseFile(DataFile);

{显示结果:
  第 1 条:
  张三
  18
  1990-1-1

  第 2 条:
  李四儿
  81
  1927-11-11

  第 3 条:
  王二麻子
  1
  2006-12-19

  第 4 条:
  嫦娥
  0
  2007-10-24
}

end;

end.
分享到:
评论

相关推荐

    SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。

    SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。

    sql结构化查询语句

    结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。 结构化查询...

    结构化查询语言SQL常用技巧.doc

    结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。

    Javaee的数据库文件

    结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 结构化查询语言是高级的非过程化编程语言,...

    SQL语句大全大全(经典珍藏版).pdf

    结构化查询语言(Structured Query Language)简称SQL(发音:/ˈɛs kjuː ˈɛl/ "S-Q-L"),结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本...

    SQL2000,一个方便的工具

    结构化查询语言(Structured Query Language)简称SQL(发音:/ˈɛs kjuː ˈɛl/ "S-Q-L"),结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本...

    SQL 21日自学通

    结构化查询语言(Structured Query Language)简称SQL(发音:/ˈɛs kjuː ˈɛl/ "S-Q-L"),结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本...

    SQL经典语句

    结构化查询语言(Structured Query Language)简称SQL(发音:/ˈɛs kjuː ˈɛl/ "S-Q-L"),结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本...

    SQLiteExpertSetup.exe

    结构化查询语言(Structured Query Language)简称SQL(发音:/ˈɛs kjuː ˈɛl/ "S-Q-L"),结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本...

    精通sql结构化查询语句

    2.2.2 一对一联系 2.2.3 一对多联系 2.2.4 多对多联系 2.3 规范化准则 2.3.1 范式 2.3.2 第一范式 2.3.3 第二范式 2.3.4 第三范式 2.3.5 第四范式 2.4.小结第2篇 数据库管理篇第3章 数据库的相关操作 3.1 创建数据库...

    MS SQL资料

    结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是...

    文件服务器安装与配置.docx

    文件服务器资源管理器包括以下功能: 文件分类基础结构 文件分类基础结构通过分类流程的自动化提供对数据的洞察力,从而让你更有效地管理数据。你可以基于此分类对文件进行分类并应用策略。示例策略包括限制访问文件...

    很全面的实操+教程

    结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是...

    SQL学习笔记

    结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是...

    C#通过序列化存读类对象(也可以是数组、结构)等为二进制文件

    序列化存取可以做到类对象、结构、数组等内存实体整体保存为二进制的文件,而不需转换,读取的时候,通过反序列化直接从文件构建对象,而不需要重新通过转换而来的数据构建,这样既节省了转换时间,运行速度又比较快...

    嵌入式Linux文件系统剪裁方法研究

    外存上的文件, 并为操作系统和用户提供文件的存取、 共享和 保护等功能。文件系统设计的好坏对系统安全和性能有着很 2. 1 大影响。 Linux 是一个迅速发展的、 system_setup( ) 例 程进 行文件 系统 初始化, 它...

    数据库基础

    4. 数据库系统具有 数据结构化 、 数据共享 、 数据独立性 、数据粒度小、独立的数据操作界面、由DBMS统一管理等优点。(08年1月、09.7考) 5. 在文件管理阶段、文件之间是相互 独立 的,在数据库管理阶段,文件之间...

    云计算(1.3)Google云计算三大核心技术 – 分布式结构化数据表BigTable

    接下来学习最后一个技术:分布式结构化数据表BigTable 谷歌技术”三宝”之BigTable Google Bigtable 中文版 引进BigTable GFS(2003年发表)使用商用硬件集群存储海量数据。文件系统将数据在节点之间冗余复制。...

    hbase-1.1.5-bin版本的压缩包,下载到本地解压后即可使用 HBase 是一个开源的、分布式的NoSQL数据库

    HBase 是一个可以进行随机访问的存取和检索数据的存储平台,存储结构化和半结构化的数据,因此一般的网站可以将网页内容和日志信息都存在 HBase 里。 如果数据量不是非常庞大,HBase 甚至可以存储非结构化的数据。...

    SnackGame贪吃蛇小游戏V2.0(C语言实现),涵盖C语言的知识直至文本文件存储

    主要实现功能有:随机食物、自动爬行、分数、重新开始、排行榜、初始化反序列化、存取档序列化和反序列化等。数据结构采用C语言结构体、动态数组、环形数组等思想进行架构。游戏初始化采用文本文件、文件存储及读取...

Global site tag (gtag.js) - Google Analytics