您现在的位置:首页 >> 网络教学 >> 文件处理技术 >> 内容

顺序文件

时间:2009-6-19 10:13:43 点击:2900

   顺序文件

顺序文件中记录的逻辑顺序与物理顺序是一致的,它的特点是:文件中各记录写入、存放和读出三者的顺序是一致的。顺序文件通常用于保存成批处理的大量数据,一般不会要求对这些数据中的个别数据进行修改。

所谓“逻辑顺序”是指写入的顺序依次为第一次,第二次等;所谓“物理顺序”是指实际存放在外存中的位置依次排在第一个记录,第二个记录等等。只有顺序文件有这个二者一致的特点:先进先出,后进后出,且先进者排在前。从顺序文件中读记录,必须从第一个记录读起,不能从中间记录读起。如果有一个包含1000个记录的文件,要读第999个记录,必须先读完前面998个记录,所以效率较低。

一、打开关闭顺序文件

使用顺序文件存取数据主要有3个步骤:打开文件、写入或读取数据、关闭文件。下面先介绍顺序文件的打开关闭操作。

(一)打开文件。在对任何文件作输入、输出之前,必须先打开文件。其格式如下:

格式10pen<文件名>For Output As[#]<文件号>

格式20pen<文件名>For Append As[#]<文件号>

格式30pen<文件名>For Input As[#]<文件号>

其中:

(1)  文件号是程序设计中文件的唯一标识,所有的文件操作中均使用文件号,而不使用文件名,包括读、写数据,关闭文件。一个有效的文件号,范围在 1 511 之间。使用 FreeFile 函数可得到下一个可用的文件号。

(2)  文件名和文件号由用户指定。对文件做任何 I/O 操作之前都必须先打开文件Open 语句分配一个缓冲区供文件进行 I/O 之用,并决定缓冲区所使用的访问方式。

(3)  格式1用于在磁盘上创建(打开)一个新的顺序文件。文件打开后,文件指针位于文件开头,等待用户把数据写(输出)到文件中。若磁盘上有同名文件则该文件被删除。

(4)  格式2用于打开一个顺序文件。文件打开后,文件指针位于文件末尾,写入的新数据将加到原文件的后面。若磁盘上没有该文件,则创建一个新文件,在这种情况下,作用与格式1相同。因为对于新文件,文件头也就是文件尾。

(5)  格式3用于打开一个存在的顺序文件用来读取字符。如果文件不存在,就会产生一个错误。

例如,使用下面的语句打开一个顺序文件:

Open "test.txt" For Input As #1

将打开一个名为test.txt的文件并指定文件号为1,在打开文件后,就可以从文件中读取字符。注意:当使用Input方式打开文件时,文件必须存在。

(二)关闭文件

    打开的文件操作完成后,应当关闭。关闭文件意味着把该文件的一切有关信息从应用

程序中清除掉,把文件缓冲区中的剩余信息全部写入磁盘,释放该文件缓冲区占用的内存。

这一系列工作内Close语句完成。关闭文件的格式如下:

close[[#]<文件号1>][,[#]<文件号2>]...

例如,执行Close #1 则文件号为1的文件将关闭。

二、读写顺序文件

顺序文件的读写操作与标准输入输出十分类似。其中读操作是指导文件中的数据读到内存,标准输入是从键盘上输入数据,因此键盘设备也可以看作是一个文件。写操作是把内存中的数据输出到屏幕上,因而屏幕设备也可以看作是一个文件。

(一)写入数据

必须用OutputAppend方式打开顺序文件文件才可以实现顺序文件的数据写入。写入数据用于实现按规定格式把输出表中的数据写到由文件号所代表的磁盘文件中。格式如下:

格式1Print#<文件号>[<输出列表>][,]

格式2Write#<文件号>[<输出列表>][,]

其中:

(1)  输出列表可包含任意数目的字符串表达式和数值表达式,表达式间以逗号或分号分隔。

(2)  Print# 语句中的表达式间用分号分隔时,字符串表达式以紧凑格式连续输出不留空位。对于数值表达式,在正数前输出一个空格,负数前输出一个负号,正、负数后均输出一个空格。Print# 语句中的表达式间以逗号分隔时为分区输出。每一项都从一个打印区的开头开始。顺序文件中的每一行部分成相同长度的区,区长度的默认值为14个字符。Print# 语句若以分号结束,则下一输出项接着输出;若以逗号结束,则下一输出项从下一打印区开始;若两者均无,则另起一行。

(3)  Write语句如果省略输出列表,并在文件号之后加上一个逗号,则会将一个空白行打印到文件中。多个表达式之间可用空格、分号或逗号隔开。空格和分号等效。在把表达式的值写入文件时,在表达式之间插入逗号,并在字符串表达式的前后插入双引号。

(4)  Print # 语句不同,当要将数据写入文件时,Write # 语句会在项目和用来标记字符串的引号之间插入逗号。没有必要在列表中键入明确的分界符。Write # 语句在将输出列表中的最后一个字符写入文件后会插入一个新行字符,即回车换行符。

10-1演示的是打开文件后分别使用PrintWrite语句输出格式的不同,图10-1显示的是用记事本打开两个输出文件后的结果。代码如下:


Private Sub Print_Click()

    Open "d:\print.txt" For Output As #1

    Print #1, "张三", 25, "1980.10.6"

    Close #1

End Sub

Private Sub Write_Click()

    Open "d:\write.txt" For Output As #1

    Write #1, "张三", 25, "1980.10.6"

    Close #1

End Sub

(二)读顺序文件

    读顺序文件分3步进行:打开文件、读入数据、关闭文件。其中打开文件、关闭文件与上述写操作时相同。

    顺序文件的读入数据步骤有两个语句和一个函数可供使用:Input#语句、Line Input# 语句、Input$函数。

1Input #语句

    Input#语句是从文件指针所指的位置起把文件中的数据依次读入变量表中。通常用 Write # Input # 语句读出的数据写入文件,因此为了能够用 Input # 语句将文件的数据正确读入到变量中,在将数据写入文件时,要使用 Write # 语句而不使用 Print # 语句。使用 Write # 语句可以确保将各个单独的数据域正确分隔开。格式如下:

       Input# <文件号>,<变量列表>

其中:

(1)  变量表中各变量名用逗号分隔,用来接纳文件中的数据。

(2)  变量的类型和次序必须与文件中的数据匹配。

(3)  变量表中不能使用结构类型变量名,例如不能使用数组名。

(4)  从文件指针所指的位置开始读,自动跳过前导空格,从前导空格后的第一个字符起读入变量中。

在读出数据时不经修改就可直接将标准的字符串或数值数据指定给变量。表10-1说明如何处理其它输入数据:

数据

指定给变量的值

分隔逗号或空白行

Empty

#NULL#

Null

#TRUE# or #FALSE#

True False

#yyyy-mm-dd hh:mm:ss#

用表达式表示的日期与/或时间

#ERROR errornumber#

errornumber(此变量是一个 Variant,用来标记错误)

10-1 数据处理表

输入数据中的双引号符号 (" ") 将被忽略。文件中数据项目的顺序必须与变量列表中变量的顺序相同,而且与相同数据类型的变量匹配。如果变量为数值类型而数据不是数值类型,则指定变量的值为零。在输入数据项目时,如果已到达文件结尾,则会终止输入,并产生一个错误。

2Line Input#语句

    Line Input#语句从顺序文件指针所指的位置起读取一个完整的行分配给字符串变量,通常用 Print # Line Input # 语句读出的数据从文件中写出来其格式如下:

Line Input#<文件号>,<字符串变量>

其中:

(1)  Line Input#可以读取顺序文件中一行的全部字符,直至遇到回车符为止。

(2)  对于以ASCII码存放在磁盘上的各种语言源程序,都可以用Line Input#语句一行一行地读取。

(3)  Line Input#Input#语句功能类似,Input#语句读取的是文件中的数据项,而Input#语句读取的是文件中的一行。

(4)  Line Input#语句可用于随机文件。

(5)  Line Input#语句常用来复制文本文件。

3Input$函数

    Input$ 函数是从<文件号>所代表的顺序文件中文件指针所指的位置起,读出一串字符作为函数的返回值。该串字符的长度由<字符数>参数指定,与文件中数据项的划分无关。其格式如下:

       Input$ (<字符数>,#<文件号>)

其中:

(1)  Input$ 函数执行所谓“二进制输入”,把一个文件作为非格式的字符流来读取。

(2)  当需要用程序从文件中读取单个字符时,或者是用程序读取一个二进制的或非ASCII码文件时,使用Input$ 函数。

通常用 Print # Put Input 函数读出的数据写入文件。Input 函数只用于以 Input Binary 方式打开的文件。与 Input # 语句不同,Input 函数返回它所读出的所有字符,包括逗号、回车符、空白列、换行符、引号和前导空格等。对于 Binary 访问类型打开的文件,如果试图用 Input 函数读出整个文件,则会在 EOF 返回 True 时产生错误。在用 Input 读出二进制文件时,要用 LOF Loc 函数代替 EOF 函数,而在使用 EOF 函数时要配合以 Get 函数。

10-2实现从文件intest.txt中读取所有文本,然后显示在TextBox中。代码如下:

Private strPath As String

Private Sub Form_Load()

    strPath = App.Path + "\" + "intest.txt"

End Sub

Private Sub Input_Click()

    Dim str As String

    Open strPath For Input As #1

    Text1.Text = ""

    Do Until EOF(1)

        Input #1, str

        Text1.Text = Text1.Text + str

    Loop

    Close #1

End Sub

Private Sub LineInput_Click()

    Dim line As String

    Open strPath For Input As #1

    Text1.Text = ""

    Do Until EOF(1)

        Line Input #1, line

        Text1.Text = Text1.Text + line + Chr(13) + Chr(10)

    Loop

    Close #1

End Sub

作者:Admin  
  • 上一篇:文件处理技术
  • 下一篇:随机文件
  • 相关文章
    • 没有相关文章
  • VB程序设计学习网站(赣南师范学院) © 2008 版权所有 All Rights Reserved.
  • 地址:江西省赣州市经济技术开发区 赣南师范学院数学与计算机科学学院 邮政编码:341000
    Email:ZQ188@163.com 技术支持QQ:87319633 移ICP备10086号
  • GnsySjxy! V2.4