《Fortran95第16章-数据文件的管理.docx》由会员分享,可在线阅读,更多相关《Fortran95第16章-数据文件的管理.docx(23页珍藏版)》请在优知文库上搜索。
1、第16章数据文件的管理当然,我们编制一个科学计算程序的目的是执行给定的计算.是描述一个通过算法而实现的对输入数据的计算的过程,而不只是简治的对数据的处理,但是这并不阻碍我们从信息处理的角度来看待这个过程.,因为任何的计算,再简洁也必定包含数据的输入与输出过程.史困难的计算程序则还包含数据的缓存管理,不同程序单位之间的数据传递,特殊是在程序的计切涉及到浩大的数据M时,例如在工程计算中常见的大数组等,更加不能依斌单纯的变及来管理浩大的数据城。事实上分析一下我11自己进行计算的情形,就知道在计算过程当中进行数据管理同样是一件特别更要的事务,而依据计交机的从冯纽姓时代就已经赐予奠基的基本模型来看,一台
2、计兑机的有效工作,依今于指令流与数据流的有机合作,BlFORTRN语言除了要描述计比,还整能的描述时于数据流的管理。在前面我们已经探讨/K)RRAN程序的内部通讯何虺,那种通讯完全是依靠变量机制来进行的,因为那种通讯都是紧密关联于计算的通讯.干脆在变质之间进行数据值的交换能终保证计徵的效率和速度。但是一旦计算所涉及的数据法特别浩大,而计算过程对于数据的输入1.j输出要求更加困难时,变让机制就不足以担当数据处理的功能.因此FORTRAN供应了单独的输入蚪出语句以及文件的概念,来实现对数据流的输入输出的管埋.除了作为面对程序自身的数据输入输出管理的功能之外,一个FORTRAN程序的完整运行还必衢包
3、括程序与人的交互,而一旦涉及到机器与人的交互,自然要求任何数据都必需以相宜于人的辨识与处理的格式出现于肯定的物理媒质上,这就是珀人与输出的编辑问题.将是下章所要探讨的内容,本章则只说明FoRTRAN所供应的输入输出处理语句。FORTRAN用于处理与管理输入输出数据的语句分为如卜四大类: 文件联结谙句包括OPEN语句和C1.OSE语句. 数据传输语句。 一类语句又可以分为2个小类别: 据传输ft入语句,包括READ语句. 据传输输出语句,包括WRrrE语句和PRINT语句。 文件定位语句。包括BACKSPACE借句.ENDH1.E语句以及REWIND谙句. 文件查询语句,包括INQUIRE语句.
4、这些谱句所要实现的筲要的功能.就是限制数据的输入与输出,即数据从外部媒质到内存,或从内郃文件到内存的输入,以及数据从内存到外部媒质,或从内存到内部文件的输出.然后就是协助性的用来操纵外部媒物,以及描述或食询文件与外部媒顷的联结屈性的功能。下面在给出FORTRAN管理数据输入输出的一般概念之后,再分别具体探讨这代语句.16.1 输入输出管理的数据单位FORTRAN对于输入输出数据进行管理的基本单位概合是纪录以及纪录如成的文件,因此下面我们分别探讨纪录与文件概念.16.1.1 纪录FoRTRAN的变量一次只能存储一个数据fi,明显不足以用来迸行有效的数据管理,因此FoRTRAN建立了特地的用来有组
5、织地存储的总数版的数据的概念,即文件.文件由一个纪录的序列级或,而纪录是一种逻辑形式上的单位,可以是终然或打印输出上显示的一行,也可以是外部存储器上的一个逻辑纪录,尽管纪录总是与各种物理形式的数据单位保持肯定的对应,但事实上是与具体的物理表现形式无关的,因为纪录本质上是一个语法上的概念.*实上在FORTRAN里面并不存在物理纪录的概念.组成个文件的纪录从语法地位上分为如下两种: 数捌纪录: 文件终止纪录.所谓数据纪录就是作为文件的数据内容的纪录,而文件终止纪录则纯粹是个语法意义上的纪录,它不包含任何数据内容,只是用来标记一个文件的终止。因此文件终止纪录只能用作文件的最终一个纪录,并且没有长度的
6、属性.由于计算机本质上的中行工作模式,纪录同样是一个申行序列的结构,该序列的单位就是数据值,即一个数据信的序列组成一个纪录.对于数据纪录来说,其中的数据他可以有如下两种表示形式: 无格式数据: 格式化数据。所谓数据的是否具有格式,完全是针而人而言的,即具有格式的数据就是把数据转化为便于人的阅读的字符型数据表示形式,也就是文字与数字,或者说ASCII编码形式:而所iH无格式数据就是FoRTRAN程序自身所实际处理的数据的在物理层面上的表示形式,殷都是二进制表示的数字形式。时于计算机来说,世界上的任何形式的信息,终归都要表示为这种形式的数据.个TORTRAN程序所涉及到的任何数据,在该程序运行时,
7、无论是作为运行的结果还是作为运行的初始值,它写入到内存当中,或从内存当中读出,或者是从内存到硬盘的输入输出,数据流里面的数据都是无格式数据.而一旦数据须要人的阅读,就必需把二进制数据形式转换为健修被人阅读的字符形式.犷实上我们桀写的源码就是这种形式的数据,个数据纪录或者完全由无格式的数据组成,称为无格式纪录;或者完全由格式化数据组成称为格式化纪录.无格式纪录完全只是在机器内部存在,它的具体的数掘形式是由系统确定的,最常见的就是二进制形式,这种纪录完全不须要人的监视与阅读,而格式化纪录则完全是人用来给机涔输入数据.或机器向人展示数据结果的数据纪录形式,因此当人向机器输入格式化纪录后,机器必箭再把
8、它翻译为无格式的纪录,才能被程序所运用,反之亦然.格式化纪录的好处就是使于人的阅读.它只能通过格式化输入帖出语句来读或写:而无格式的纪录的特点就是能帔I:脆得到机涔的处理,相应的它也只能通过无格式的输入输出语句来读或耳。对于纪录可以定义长度的概念.格式化纪录的长僮就是其所包含的字符的数目:而无格式纪录的长度同样用来计量其中数据信的大小,它的具体度属方法的定义则依益于具体的处理器系统对于数据玳单位的定义,格式化纪录和无格式纪录的长度都可以为0,除了包含数据值的纪录之外,还有文件终止纪录。由于它只是起文件终止的语法标记作用,因此它不包含任何数据,所以它的长度也就是Q.一个文件至多只能包含一个文件终
9、止纪录,并且只能是文件的终一个纪录,文件终止纪录可以有如下几种生成方式: 可以通过文件的序列访问,最终用一个ENDH1.E语句品式地写下来: 也可以通过文件定位语句,如REWIND语句或BACKSPACE语句,而吃式地写下来: 运用C1.OSE语句关闭文件或部件,或者是正常地终止程序,或者是对同一个部件运用了另外一个OPEN语句,从而隐式地写下来.从上面的文件终止纪录的实现方式可以看出,这种纪录并不须要任何实际的物理实现“16.1.2 文件一个纪录的序列构成一个文件.在程序运行的任何时候,对于一个给定的文件,它的访问方法,形式,操作以及纪录的长度,都明确地存在相应的依粘于系统的合法性规定,同时
10、文件也可以具有字符串类型的名称.即所谓命名文件,不过对于该名称所运用的字符形式或氏度,都是由具体的系统来规定,以便与相应操作系统对于文件的命名约定保持一样,依据文件与程序的功能关系以及行储性脑,文件可以分为如卜两种: 内部文件: 外部文件。所训内部文件存储在程序可以访问的内存空间里面,而外部文件则存储在系统的外部存储部件上,例如硬盘,这种存储位置的不同事实上也反映了它们对于程序的不同功能.因为这两种存储空间的物理性能整并确定J它们对于CPU是具有不同意义的.外部文件与内部文件的这种不同功能懑义体现在如下几个不同的方面: 文件的存在性。对于外部文件来说,程序须要访问的一个外部文件可能是存在的,也
11、可能是不存在的.表是合法的程序运行现坡.例如INQUlRE语句,OPEN语句,C1.oSE语句,WRITE语句,PRlNT语句,REWIND语句,以及ENDFl1.E语句都可以引用一个并不存在的文件;而假如运用WRITE语句.PRINT谱句.或ENDFl1.E语句来引用个预联结的并不存在的语句.就臼然地能够生成该文件.一个外部文件的不存在也可能是来源于系统对于硬盘空间的权限限制,例如对于一个FORTRAN应用程序来说.系统文件以及FORIKAN循译;程序文件都不应当被访问.而对于程序来说,它所涉及的内部文件则都必需存在于相应的内存空间里面。 程序对外部文件的访问须要通过与逻辑部件建立联结因此就
12、须要相应的能桃对外部文件进行联结,定位与查询的语句,而对于内部文件则不须要这些语句功能.同时这种联结就使得外部文件具有定位的属性, 对干外部文件来说,它的访问方式.合法形式.合法操作.以及合法纪录长度等都不是由H)RTRAN追古标准来现定,而是由操作系统对于文件的约定以及用户的特定选择来确定的:而内部文件的内容都是作为默认字符型变量的数据值的形式而储存的,这些字符型数据tfi都是程序的通常的赋值过程所产生的,或者是输出语句针对变St而给出的.假如内部文件所表示的变量是一个标破,那么该文件就只有一个纪录:假如该变量是一个数组,那么该数组的年一个元素纲成该文件的一个纪录,文件里面纪录的依次就是数组
13、的相应的元素依次,每个纪录的长度就是相应元素的长度.16.1.3 文件的访问由于文件的纪录是一种电行的序列结构,要实现对文件的纪录的访问,可以有如卜两种方式:序列访问:干腌访问。所谓序列访问,就是顺着文件的纪录序列来访问特定的纪录.即假如要访问文件的笫n个纪录,则须要顺次羟过文件的第1.,始终到第n-l个纪录,才访问到第n个纪录:而干脆访问则不须要经过前面的n-l个纪录,通过指定纪录号即可干脆访问第n个纪录,因此干脆访问无论是读还是写.都可以依据随意的依次进行.这两种不同的访问方法很大程度上是由存储文件的媒历以及系统的约定等外部因素确定的,例如存储在租带上面的可能就只允许采纳序列访问的方式进行
14、访问。不过当一个文件被联结到了一个特定的部件之后,或者是预联结的文件被生成之后.它的访问方式就已经被确定了.这两种不同的访问方式是由时文件的联站方式酬定的,而不是舄5文件自身的屏性,一个文件可以只能通过井列访问方式呆访问,也可以只能通过干脸访问方式来访何,也可以分别通过这两抑方式,来访问,但不能同计用这两种方式来访问.也就是说当文件通过某个联练而被理序依据序列方犬来访问,昨么须要运用C1.OSE诲句来关用祓联结之后,再运用OPEN语句支新定立新的联结,才能换为依媒干脆访问的方式来访问.能陆干脆访何读的纪录只FI1.于已接写下汆的纪录.检物干他访何写的文件限于也立了干脆访问联都的文件。1 .序列
15、访问一个外部文件建立了序列访问的联结之后它就具有如下的属性: 假如针对该文件的干脆访问是非法的,那么组成该文件的纪录的依次就是写入该文件的纪录依次;假如同时针对该文件的干脆访问也是合法的.那么该文件的纪录的依次由干脆访问来确定,即序列访问该文件的第一个纪录就是干脆访问该文件所指定的纪录号为I的纪录,后面顺次类推. 文件的纪录或者全部是格式化纪录.或者全部是无格式纪录.当然有可能出现在文件最终的文件终止纪录除外只要该文件的前一个引用不是数据传怆输出语旬或文件定位语句,那么文件的最终一个纪录就肯定是文件终止纪录。 文件的纪录不允许干脆访问输入辎出语句的读与写.2 .干脆访问线如一个外部文件所建立的联结是干脆访问.那么该文件具有如下属性: 文件的全郃纪录都具有一个唯一的纪录号,该纪录号为一个正整数.是在写纪录时给定的,而这个纪录号一旦给定,就再也不能变更.该纪录号确定了文件的纪录的依次. 文件的任何纪录不允许被删除,但允许被改写. 文件的纪录或者全部是格式化纪录,或者全部是无格式纪录.置如对于该文件序列访问方式也是合法的,那么当该文件被联结到干脆访何时,它有可他包含的文件终止纪录则不被认为是减于该文件的一部分.黄如对于该文件不允许序列访问,那么该文件就不能包含文件终止纪录. 只有通过干脆访问输入输出语句才能实现时纪录的读和写. 文件全部的纪录的长度相同.