Fortran 关于I/O 相关知识

困惑于Fortran 的读写文件件以及输入输出的理解!借鉴人家思路,做了一个简单的整理! 一、文件读取 读取:“顺序读取”和“直接读取”。保存:“文本文件”

困惑于Fortran 的读写文件件以及输入输出的理解!借鉴人家思路,做了一个简单的整理!

一、文件读取

  • 读取:“顺序读取”和“直接读取”。
  • 保存:“文本文件”和“二进制文件”。

二进制文件:读取快,因为保存格式和数据在内存中的保存方法一样,同时也节省空间。

二、文件的操作

1. open的使用:

-- 使用open命令打开文件之后,就可以对文件来做输入输出。
OPEN(UNIT=number, FILE='filename', FORM='...', STATUS='...', ACCESS='...', RECL=length, ERR=label, IOSTAT=iostat, BLANK='...', POSITION='...', ACTION=action, PAD='...', DELIM='...')
UNIT='number'/*
number必须是一个正整数,它可以使用变量或是常量来赋值。
number最好避开1,2,5,6。
因为2,6是默认的输出位置,也就是屏幕。
1,5则是默认的输入位置,键盘。
*/
FILE='filename'/*
指定要打开的文件名称,文件名要符合系统规定。
windows下不区分大小写,
unix下则会区分大小写,最好不要使用中文文件名。
*/
FORM='FORMATTED' OR 'UNFORMATTED'
FORM字段只有两个值可以设置:
FORM='FORMATTED'      “文本文件”格式来保存
FORM='UNFORMATTED'   “二进制文件”格式保存
这一栏不给定时候的默认值是: FORM='FORMATTED'
STATUS='NEW' or 'OLD' or 'SCRATCH' or 'UNKNOWN' 
用来说明打开一个新的文件或已经存在的旧文件。
/*
STATUS='NEW'      打开一个原本不存在的新文件
STATUS='OLD'         打开一个原来已经存在的文件
STATUS='REPLACE'   若文件已经存在则重新创建一次,原来的内容消失;若不存在则会创建新文件。
STATUS='SCRATCH'   表示要打开一个暂存文盘,这个时候可以不需要指定文件名称,也就是FILE这个一栏可以忽略。因为程序本身会自动取一个文件名,至于文件名是啥也不重要,因为暂存盘会在程序结束后自动删除。
STATUS='UNKNOWN' 由各编译器自定义。通常会同REPLACE的效果。
!这一栏不给定时,默认为STATUS='UNKNOWN'。
*/
ACCESS='SEQUENTIAL' or 'DIRECT'   
设置读写文件的方法:
/*
ACCESS='SEQUENTIAL'    读写文件的操作会以“顺序”的方法来做读写,“顺序读取文件”。
ACCESS='DIRET'         读写文件的操作可以任意指定位置,“直接读取文件”。
!不赋值时候,默认为: ACCESS='SEQUENTIAL'。
*/
RECL=length 
在顺序读取文件中,RECL字段值用来设置一次可以读取多大容量的数据。
/*
打开“直接读取文件”,RECL=length的length值是用来设置文件中每一个模块单元的分区长度。
length的单位在文本根式下为1个字符,也就是1 byte。
在二进制格式下则由编译器自行决定,一般可能为1 byte (G77) 或 4 byte (Visual Fortran)。
*/
ERR=LABEL 这个字段用来设置当文件打开发生错误时,程序会跳跃到LABEL所指定的行代码处来继续执行程序。
IOSTAT=var 
这个字段会设置一个整数值给后面的整型变量,这是用来说明文件打开的状态,数值会有下面三种情况:
var>0     表示读取操作错误
var=0     表示读取操作正常
var<0     表示文件终了
BLANK='NULL' or 'ZERO' 用来设置输入数字时,当所设置的格式字段中有空格存在时所代表的意义。
BLANK='NULL'时,空格代表没有东西。
BLANK='ZERO'时,空格部分会自动以0代入。
以下是Fortran 90添加的功能:
POSITION='ASIS' or 'REWIND' or 'APPEND'   设置文件打开时候的读写位置:
POSITION='ASIS'   表示文件打开时的读取的位置不特别指定,通常就是在文件的开头。是默认值。
POSITION='REWIND'      表示文件打开时的读取位置移到文件的开头。
POSITION='APPEND'     表示文件打开时的读取位置移到文件的结尾。ACTION='READ' or 'WRITE' or 'READWRITE'   设置打开文件的读写权限:
ACTION='READWRITE'    表示所打开的文件可以用来读取及写入,这是默认值。
ACTION='READ'          表示所打开的文件只能用来读取数据。
ACTION='WRITE'         表示所打开的文件只能用来写入数据。PAD='YES' or 'NO'
PAD='YES'   在格式化输入时,最前面的不足字段会自动以空格填满,默认值是PAD='YES'。
PAD='NO'    在格式化输入时,不足的字段不会自动以空格填满。DELIM='APOSTEROPHE' or 'QUOTE' or 'NONE'
DELIM='NONE'       纯粹输出字符串内容
DELIM='QUOTE'      输出字符串内容会在前后加上双引号
DELIM='APOSTEROPHE'   输出字符串内容会在前后加上单引号

2、write 和 read

WRITE/READ(UNIT=number, FMT=format, NML=namelist, REC=record, IOSTAT=stat, ERR=errlabel, END=endlabel, ADVANCE=advance, SIZE=size)
UNIT=number    指定read/write所使用的输入输出的位置。
FMT=format    指定输入输出格式的使用。
NML=namelist   指定读写某个NAMELIST的内容(后续介绍)。
REC=record      在直接读取文件中,设置所要读写的文件的模块位置。
IOSTAT=stat     会设置一个数值给在它后面的变量,用来说明文件的读写状态。stat>0    表示读取操作发生错误。stat=0    表示读取操作正常。stat<0    表示文件终了。
ERR=errlabel     指定在读写过程中发生错误时,会转移到某个行代码来继续执行程序。
END=endlabel    指定在读写到文件末尾时,要转移到某个行代码来继续执行程序。
以下是fortran 90添加功能:
ADVANCE='YES' or 'NO' 设置在文本格式下的顺序文件中,每一次的READ,WRITE命令完成后,读写 位置会不会自动想下移动一行。ADVANCE='YES'   是默认的状态,每读写一次会向下移动一行。ADVANCE='NO'    会暂停自动换行的操作。!使用这个字段时候一定要设置输出入格式,在屏幕输出时可以使用这个设置来控制write命令是否会自动换行。
SIZE=count   在ADVANCE='NO'时,才可以使用这个字段。它会把这一次输出入的字符数目设置给后面的整型变量。