`
free_bird816
  • 浏览: 206047 次
  • 性别: 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.
分享到:
评论

相关推荐

    42 文件的组织结构及存取方法.pptx

    记录式文件由一系列有序记录组成,可以是定长或变长,适合处理结构化数据。流式文件则没有明显的内部结构,是一组有序的信息流,通常按照字节计算长度,适用于文本或音频等非结构化数据。 其次,文件的物理结构关注...

    asp网页制作利用文件存取组件课件

    ASP网页制作中,文件存取组件是用于处理和操作文件系统的关键工具,它允许开发者创建、读取、修改和删除文件,以及进行磁盘和文件夹的管理。本课件主要涵盖以下几个方面: 1. **文件存取组件概述**: - 文件存取...

    半结构化数据及其数据模型

    1. **XML数据模型**:XML是一种用于标记文档的标准语言,它允许用户定义自己的标签来描述数据,非常适合表示半结构化数据。XML数据模型基于树形结构,每个节点都可以包含子节点、属性和文本。 2. **RDF数据模型**:...

    界面设计与文件存取(c#实验指导 马骏版) 实验四

    为了存储个人存款信息,你可能需要创建一个文本文件,每次存款时更新文件内容,或者将数据保存到结构化的CSV文件中,以便将来分析。 在处理个人存款业务时,你可能需要实现以下功能: 1. **存款**:用户输入存款...

    结构化内存监视器

    "结构化内存监视器"是一种专门用于检测和分析计算机系统内存使用情况的工具。它能够帮助用户深入了解系统内存的工作机制,以及程序如何占用和管理内存资源。在IT领域,理解和优化内存使用对于提升系统性能至关重要,...

    非结构化数据集中管理解决专项方案.docx

    随着信息技术的飞速发展,非结构化数据(如文档、图片、视频、音频等)在企业信息化中的地位日益重要。非结构化数据的快速增长给企业的数据管理带来了巨大的挑战,包括数据的安全性、访问效率、存储成本以及数据分析...

    visual basic2005文件IO与数据存取秘诀第一章范例

    XML文件提供了结构化的数据存储,可以使用`XmlDocument`或`XDocument`类进行解析和操作。数据库存取,通常涉及ADO.NET框架,如使用`SqlConnection`、`SqlCommand`、`SqlDataReader`等类与SQL Server交互。 在第一章...

    计算机组成:结构化方法(第5版)

    《计算机组成:结构化方法》是一本针对计算机科学和工程专业学生的教科书,侧重于计算机体系结构和组成原理。本书作为第五版,很可能是经过更新和修订的版本,它覆盖了计算机硬件的各个方面,包括处理器、存储系统、...

    SQLServer数据库存取任意文件实例

    这个实例主要关注如何通过SQLServer来操作二进制大对象(BLOB),即Binary Large Object,来存储和访问非结构化的文件数据,如图片、文档、音频或视频等。 首先,我们来看"CreateTable.sql"文件,它应该包含了创建...

    Android 文件存取

    对于**简单存储**,Android提供了几种简化文件操作的方式,如`SharedPreferences`用于存储键值对,`SQLite`数据库用于结构化数据,以及`ParcelFileDescriptor`用于大文件操作。 **文件管理**在Android中通常涉及...

    开放结构化数据服务 OTS.zip

    在这个压缩包中,我们特别关注的是“开放结构化数据服务”(OTS),这可能是某种云服务或者数据库管理系统,它允许用户以结构化方式存取和管理数据。 首先,我们来深入探讨数据结构的基本概念。数据结构包括数组、...

    HDFS海量小文件存取优化1

    【标题】:“HDFS海量小文件存取优化1” 【描述】:本项目探讨了在分布式文件系统(如Hadoop的HDFS)中处理大量小文件的优化策略。HDFS通常设计为处理大文件,其元数据管理对于大量小文件来说可能会成为性能瓶颈。...

    Visual+C#+2005文件IO与数据存取秘诀

    - 对于结构化数据,常常使用数据库进行存储。ADO.NET是.NET框架中用于数据库访问的组件,提供DataSet、DataTable、DataAdapter等对象,方便进行CRUD操作。 - SqlConnection、SqlCommand和SqlDataReader用于与SQL ...

    企业非结构化业务数据管理整体解决方案.ppt

    企业非结构化业务数据管理整体解决方案主要关注的是如何有效管理和利用那些无法用传统数据库二维逻辑表来表示的数据,如文档、图片、视频等。这些非结构化数据在企业中占据了大量资源,且往往包含了宝贵的业务信息和...

    C++职工信息管理 实现文件存取操作

    在C++编程中,职工信息管理系统是一个典型的案例,它涉及到数据结构、文件操作以及对象的持久化存储。本文将深入探讨如何使用C++实现职工信息的文件存取操作,以便在程序关闭后能够保存数据,并在下次启动时自动加载...

    Oracle存取文件

    Blob类型在数据库设计中非常常见,特别是在需要处理大量非结构化数据的应用场景下。 #### 二、将文件转换为Byte[]并存储到Blob字段 在Java等编程语言中,通常会将文件转换为`Byte[]`数组以便于存储或传输。下面详细...

Global site tag (gtag.js) - Google Analytics