在fortran中公开声明

时间:2015-04-18 22:02:15

标签: fortran gfortran

我对fortran的开放命令有疑问。

OPEN (UNIT = , FILE=file-name, ACCESS=access, FORM=form, RECL=recl)`
Access = sequential, direct
FORM=formatted, unformatted 

recl是文件

的记录长度(以字节为单位)

我尝试了很多搜索,但无法获得顺序或直接访问,格式化或未格式化文件的含义,记录文件的长度。有人能解释一下这些术语的含义吗?

2 个答案:

答案 0 :(得分:1)

在网上很容易找到(包括在这里讨论):

“记录”是数据,通常是字符。有些文件的记录长度相同,有些则没有。在这两者之间,有一些文件存储每条记录的长度作为记录的一部分。最简单的方法是处理具有相同长度记录的文件,因为(对于许多存储设备),您可以通过了解记录编号和记录长度来计算特定记录的开头。如果记录长度不同,则跟踪记录位置还需要做更多的工作。

顺序文件一次只能访问一条记录,如磁带(有关长度讨论,请参阅this page)。通常情况下,磁带可以倒带,向前读取,但随机读取更难。这样做是直接访问。 This page清楚地表明两者之间有明显的选择 - 你可以拥有一个或另一个。

格式化输出就是这样 - 使输出遵循一些报告样式格式(在行的级别上),而未格式化的输出不遵循整洁的规则。有关讨论的示例,请参阅Fortran unformatted file format。从技术角度来看,Oracle的this page更深入。

答案 1 :(得分:1)

文件访问指定在打开文件后如何写入(或读取)文件。使用一种访问模式打开,但读取/写入与另一种访问模式一致,通常会导致运行时错误。

自然地,顺序访问意味着顺序读取和写入。顺序写入意味着输出以与程序产生的顺序相同的顺序放置在文件的输出中,因此,如果在Y之前输出X,则文件将包含X(比文件的开头更近),而不是Y.表示从文件的开头到结尾进行读取。追加访问是一种特殊形式的顺序访问,从文件末尾开始(因此写操作会添加到文件末尾)。

直接访问意味着可以按任何顺序访问文件的内容。这也称为随机访问。实质上,在执行输入或输出时,程序必须指定文件中要进行操作的位置。

Fortran中直接访问文件中的位置是根据"记录"指定的,它们具有完全相同的长度(在打开文件时由RECL=子句指定)。因此,如果一个文件包含20条记录并且记录长度等于30,则程序可以从该文件访问的数据总大小为600字节,并且每次读取或写入操作都将访问包含30个字节的记录。

未格式化的文件基本上意味着文件的内容作为流读取和写入。未格式化的顺序访问文件相当于C语言中从头到尾读取的二进制文件。未格式化的直接访问文件也是二进制文件,但操作可以按任何顺序访问该文件(在程序的控制下)。

格式化文件本质上意味着所有读写都必须涉及格式规范。还有一些特殊的处理方法,例如,在写入时,在每个写入语句的末尾将新行标记写入文件。

直接文本文件通常作为顺序访问格式文件打开。每个Fortran读取或写入操作都作用于一个新行(因此两个写入语句将在文件中生成两行,并且需要两个相应的读取语句将其读回)。

可以使用格式化的直接访问文件。这基本上意味着读写语句必须指定读/写记录的格式,但可以按任何顺序访问记录。记录的末尾通常标有换行符。