Fortran输入输出处理全解析
立即解锁
发布时间: 2025-08-16 01:29:56 阅读量: 11 订阅数: 38 


Fortran 2003: 完整语法与特性指南
### Fortran 输入输出处理全解析
#### 1. Fortran 输入输出语句概述
Fortran 拥有一系列强大的输入输出语句,它们与字符内置函数结合,能有效形成一种字符串处理语言。这些输入输出语句包括:
- READ
- PRINT
- WRITE
- OPEN
- CLOSE
- INQUIRE
- BACKSPACE
- ENDFILE
- REWIND
- WAIT
- FLUSH
这些语句各自有着不同的功能:
| 语句 | 功能 |
| --- | --- |
| READ | 数据传输输入语句,用于将数据从外部文件传输到内部存储,或从内部文件传输到内部存储。 |
| WRITE 和 PRINT | 数据传输输出语句,用于将数据从内部存储传输到外部介质,或从内部存储传输到内部文件。 |
| OPEN 和 CLOSE | 文件连接语句。 |
| INQUIRE | 用于查询文件和连接属性。 |
| BACKSPACE、ENDFILE 和 REWIND | 文件定位语句。 |
大部分输入输出操作与程序执行是同步进行的,但也支持异步输入输出。异步输入输出允许处理器启动数据传输后继续进行计算,直到后续的等待操作使输入输出操作同步,这通常被称为“缓冲输入输出”。异步输入输出常用于在处理大数据集的部分数据时,同时对其他部分进行计算。不过,程序员需要注意系统相关的输入输出限制,特别是在对具有特殊属性的设备进行输入输出时,如终端、管道或盖革计数器等设备。
#### 2. 基本输入输出概念
数据集合通常存储在流文件或记录文件中。
- **记录文件**:数据被组织成一系列记录,大多数数据传输语句处理整个记录。
- **流文件**:数据由一系列文件存储单元组成,大多数流数据传输语句一次只处理几个存储单元。
文件存储单元是无格式记录的基本记录长度单位,也是任何外部文件的长度单位。标准建议文件存储单元为 8 位八位字节,大多数实现都遵循这一建议,其值由 ISO_FORTRAN_ENV 内置模块中的命名常量 FILE_STORAGE_SIZE 给出。
历史上,文件的定义便于处理磁带,磁带单元有物理上的“记录”概念,磁带按顺序一次处理一个记录。随着 Fortran 和输入输出系统的改进,Fortran 的文件处理功能不断增加,但基本的面向记录的文件处理仍然是大多数输入输出的基石。现代面向磁盘的文件系统通常使用不同的“记录”概念,它们通常将记录分块成自然的磁盘块(扇区或磁道)以提高输入输出效率。
由于流文件和记录文件在处理器上可能有不同的物理表示,因此在程序的不同部分或不同程序中,可能无法同时以流输入输出和记录输入输出的方式打开同一个文件。同样,直接访问文件和顺序访问文件通常也有不同的表示,访问方式可能仅限于一种。文件和记录的属性不依赖于它们在硬件上的存储方式。
#### 3. 记录文件
记录文件是一系列记录的序列,记录的大小可以不同,有些或所有记录可以为空,文件甚至可以没有记录。记录分为三种类型:
- **格式化记录**:包含一系列字符,可由人在终端输入或由 Fortran 程序将值转换为字符串创建。读取格式化数据时,字符会被转换为计算机内部的值表示,通常是二进制表示。格式化记录的长度是其中字符的数量,长度可以为零。处理器可能会禁止在格式化文件中使用某些控制字符,以避免与记录标记或文件结构冲突。
- **无格式记录**:只包含无格式数据,通常以计算机内存中的存储形式表示。无格式记录通常由运行 Fortran 程序创建,无格式数据在外部设备上占用的空间通常较少,读写速度也更快,因为不需要进行转换。但它不适合人类阅读,并且由于值的内部表示依赖于机器,通常也不适合在不同计算机之间轻松传输数据。无格式数据记录的长度以文件存储单元为单位测量,长度可以为零。
- **文件结束记录**:文件中最多有一个文件结束记录,且总是文件的最后一个记录,用于标记文件的结束。可以使用 ENDFILE 语句显式写入,也可以通过文件定位语句(REWIND 或 BACKSPACE 语句)或关闭文件隐式写入。文件结束记录只有在文件以顺序访问方式连接时才能读写,它不一定在文件中有物理表示,可能只是文件管理系统中的一个记账条目,其形式依赖于处理器。
#### 4. 流文件
流文件是一系列文件存储单元的序列,可根据文件的不同以格式化或无格式访问方式连接。与记录文件不同,流文件没有记录导向,这使其具有多个优点:
- 设计用于与 C 语言互操作,也能与几乎任何非 Fortran 文件结构配合使用。
- 对于某些应用程序,如标准化文件交换格式(如图形图像文件),具有更直观的结构。
- 没有最大记录长度限制,随机访问比 Fortran 的直接访问文件更灵活。
但使用流文件时,程序员通常需要更加小心,处理更多细节。当流文件以无格式访问方式连接时,没有记录的概念,每个文件存储单元可以单独读写,且每个文件存储单元都有唯一的位置编号。有些流文件可以使用位置编号定位到特定位置,而有些则不能。在创建格式化流文件时,程序员可以使用 NEW_LINE 内置函数在文件中插入记录标记,使文件除了流结构外还有记录结构。格式化流文件中的每个字符都有唯一的位置编号,但由于可能存在记录标记,并非所有位置编号都对应文件中的字符。如果要将格式化流文件定位到初始点以外的位置,必须使用带有 POS 说明符的 INQUIRE 语句的结果。
#### 5. 外部文件和内部文件
文件主要分为两类:
- **外部文件**:位于外部设备上,如磁盘、磁带或计算机终端。每个外部文件都有一组允许的访问方法、允许的形式、允许的操作和允许的记录长度。这些特性通常由文件创建者的请求、操作系统的操作以及文件所在设备的细节共同决定。外部文件连接到单元后具有位置属性,除非文件位于文件的开头或结尾,否则记录文件位于当前记录(开头或结尾),在某些情况下位于当前记录内部,而流文件位于文件存储单元之间。文件可以有名称,但文件名的允许形式取决于处理器。
- **内部文件**
0
0
复制全文
相关推荐










