本节介绍一些 Fortran 95 输入/输出处理扩展,f95 编译器接受这些扩展,但它们不是 Fortran 2003 标准的一部分。某些扩展是在 Fortran 77 编译器 f77 中出现的 I/O 扩展,现在这些扩展已成为 Fortran 编译器的一部分。
通过两个新函数,用户可以为逻辑单元上的格式化输入指定自己的错误处理例程。当检测到格式错误时,运行时 I/O 库会调用指定的由用户提供的处理程序例程,同时将数据指向输入行中导致错误的字符。处理程序例程可以提供一个新字符,并允许 I/O 操作在检测到错误的点上使用新字符继续运行;或者采用缺省的 Fortran 错误处理操作。
新例程 SET_IO_ERR_HANDLER(3f) 和 GET_IO_ERR_HANDLER(3f) 是模块子例程,这两个例程要求在调用它们的例程中使用 USE SUN_IO_HANDLERS。要详细了解这些例程,请参见手册页。
Fortran 77 允许用尖括号括起的任意表达式来代替具有某种格式的任何整数常量:
1 FORMAT( … < expr > … )
变量格式表达式不能作为 nH… 编辑描述符中的 n 出现在 ASSIGN 语句引用的 FORMAT 语句中,或者出现在并行区域内的 FORMAT 语句中。
这种功能是在 f95 中自动启用的,并且不要求使用-f77 兼容性选项标志。
输入中的组名前面可以是 $ 或 &。& 是 Fortran 95 标准接受的唯一格式,并且是 NAMELIST 输出所写入的内容。
接受 $ 作为用来终止输入的符号,但以下情况除外:组中最后一个数据项是 CHARACTER 数据,此时将 $ 作为输入数据处理。
允许 NAMELIST 输入从记录的第一列开始。
使用 FORM=’BINARY’ 打开文件与使用 FORM=’UNFORMATTED’ 具有大致相同的效果,所不同的是文件中没有嵌入记录长度。如果没有此数据,则无法知道一条记录的开始或结束位置。因此,无法对 FORM=’BINARY’ 文件执行 BACKSPACE 操作,这是因为不知道要退格到什么位置。对 ’BINARY’ 文件执行 READ 操作时,将按需要读取尽可能多的数据来填充输入列表中的变量。
WRITE 语句: 以二进制的形式将数据写入文件,并按输出列表中指定的数量传输字节。
READ 语句: 将数据读取到输入列表中的变量,并传输该列表所要求数量的字节。因为文件中没有记录标记,所以不进行“记录结束”错误检测。检测到的唯一错误是“文件结束”或异常系统错误。
INQUIRE 语句:对使用 FORM="BINARY" 打开的文件执行 INQUIRE 返回:
FORM=”BINARY”ACCESS=”SEQUENTIAL”DIRECT=”NO”FORMATTED=”NO”UNFORMATTED=”YES”RECL= AND NEXTREC= are undefined
BACKSPACE 语句: 不允许使用-返回一个错误。
ENDFILE 语句: 在当前位置照常截断文件。
REWIND 语句: 将文件照常重新定位到数据的开头。
在不同单元上可能出现的递归 I/O(这是因为 f95 I/O 库为 "MT-Warm")。
RECL=2147483646 (231-2) 是顺序格式化输出、列表式输出和名称列表输出中的缺省记录长度。
可以按《FORTRAN 77 Language Reference》手册中所述识别和实现 ENCODE 和 DECODE。
非前进式 I/O 是使用 ADVANCE='NO' 启用的,如下所示:
write(*,’(a)’,ADVANCE=’NO’) ’n= ’ read(*,*) n