-
fortran
文件操作
From:
《
Fortran 95
程序设计》
彭国伦
1.
文件读取的概念:
读取:
“顺序读取”和“直接读取”
。
保存:
“文本文件”和“二进制文件”
。
二进制文件:读取快,因为保存格式和数据在
内存中的保存方法一样,同时也节省空间。
--------
--------------------------
2.
文件的操作:
----------------------------------
open
的使用:使用
open
命令打开文件之后,就可以对文件来做输入输出。
example:
program ex0901
impicit none
open(unit=10,
file='') !
打开
文件
,
unit
指定文件代码,
file
指定
文件名称。
write(10, *)
在代码为
10
的文件中写入
hel
lo
stop
end program ex0901 <
/p>
open
中有很多参数可以使用,详细如下:
OPEN(UNIT=number,
FILE='filename',
FORM='...',
STATUS='...',
ACCESS='...',
RECL=length,
ERR=label,
IOSTAT=iostat,
BLANK='...',
POSITION='...',
ACTION=action,
PAD='...',
DELIM='...')
UNIT='number'
:
nu
mber
必须是一个正整数,它可以使用变量或是常量来赋值。
number
最
好避开
1,2,5,6
。因为
2,6
是默认的输出位置,也就
是屏幕。
1
,
5
则是默认的输入位置,键
盘。
FILE='filename'
:
指定要打开的文件名称,文件名要符合系统规定。
window
s
下不区分大
小写,
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
p>
这个一栏可以忽略。
因为程序本身会自动取一个文件名,
至于文件名是啥也不重要,
因为暂存盘会在程序结束后自动删除。
STATUS='UNKNOWN'
由各编
译器自定义。通常会同
REPLACE
的效果。
!这一栏不给定时,默认为
STATUS='UNK
NOWN'
。
ACCESS='SEQUENTIAL' or 'DIRECT'
设置读写文件的方法:
ACCESS='SEQUENTIAL'
读写文件的
操作会以
“顺序”
的方法来做读写,
“
顺序读取文件”
。
ACCESS='DIRET'
读写文件
的操作可以任意指定位置,
“直接读取文件”
。
!不赋值时候,默认为:
ACCESS='SEQUENTIAL'
。
RECL=length
在顺序读取文件中,
RECL
字段值用来设置一次可以读取多大容量的数据。
打开“直接读取文件”
,
RECL
=
length
的
length
值是用来设置文件中每一个模块单元的分
区长
度。
length
的单位在文本根式
下为
1
个字符,也就是
1 byte<
/p>
。在二进制格式下则由编译器自行
决定,一般可能为
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'
在格式化输入时,
< br>最前面的不足字段会自动以空格填满,
默认值是
PAD=
'YES'
。
PAD='NO'
在格式化输入时,不足的字段不会自动以空格填满。
DELIM='APOSTEROPHE' or 'QUOTE' or
'NONE'
DELIM='NONE'
纯粹输出字符串内容
DELIM='QUOTE'
输出字符串内容会在前后加上双引号
DELIM='APOSTEROPHE'
输出字符串内容会在前后加上单引号
---------------------------------------
--
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
命令完成<
/p>
后,
读写
位置会不会自动想下移动一行。
ADVANCE='YES'
是默认的状态,每读写一次会向下移动一行。
ADVANCE='NO'
会暂停自动换行的操作。
!使用这个字段时候一定要设置输出入格式,在屏幕输出时可以使用这个设置来控制
p>
write
命令是否会自动换行。
SIZE=count
在
ADV
ANCE='NO'
时,才可以使用这个字段。它会把这一次输出入的字符数目
设置给后面的整型变量。
---------
-------------------------
查询文件的状态
INQUIRE:
在
使用
open
打开文件的前后,都可以通过
inquire
命令来查询文件目前的情况,
inquir
e
命令中的各个字段和第一小节中
open
的字段很类似。
example:
!
检查某个程序是否存在
program ex0903
implicit none
character(len=20) :: filename =
logical alive
inquire(file=filename, exist=alive)
if(alive) then
write (*,
*) filename,
else
write
(*, *) filename,
end if
stop
edn program ex0903
< br>详细介绍
inquire
的使用方法:
< br>
INQUIRE(UNIT=number,
FILE=filename,
IOSTAT=stat,
ERR=label,
EXIST=exist,
OPENED=opened,
NUMBER=number, NAMED=named,
ACCESS=access, SEQUENTIAL=sequential,
DIRECT=direct,
FORM=form,
FORMATTED=formatted,
UNFORMATTED=unformatted,
RECL=recl)
UNIT=number
文件代号
FILE=filename
文件名
IOSTAT=stat
查询文件读取情况,会设置一个整数给后面的变量:
stat>0
文件读取操作错误
stat=0
文件读取操作正常
stat<0
文件终了
ERR=errlabel
发生错误时会转移到复制的代码行继续执行程序。
EXIST=exist
检查文件是否存在,返回布尔
变量,真表示存在,假值表示不存在。
OPEND=opened
检查文件是否用已经用
open
打开,
返回布尔变量,
< br>真表示已经打开,
假表示
尚未打开。
NUMBER=number
用文件名来查询这个文件所给定的代码。
NAMED=named
查询文件是否取了名字,
也就是检查文件是否为临时保存盘,
返回值为逻辑
数。
ACCESS=access
检查文件的读取格式,返回一个字符串,可以是:
'SEQUENTIAL'
代表文件使用顺序读取格式
'DIRECT'
代表文件使用直接读取格式
'UNDEFINED'
代表没有定义
SEQUENTIAL=sequential
查看文件是否使用顺序格式,会返回一个字符串,可以是:
'YES'
代表文件是顺序读取文件
'NO'
代表文件不是顺序读取文件
'UNKNOWN'
代表不知道
DIRECT
=
direct
查看文件是否使用直接格式,会返回一个字符串,可以是:
'YES'
文件是直接读取文件
'NO'
文件是非直接读取文件
'UNKNOWN'
代表不知道
FORM=form
查看文件的保存方法,返回字符串,可以是:
'FORMATTED'
打开的是文本文件
'UNFORMATTED'
打开的是二进制文件
'UNDEFINED'
没有定义
FORMATTED=fmt
查看文件是否是文本文件,返回字符串,可以是:
'YES'
本文件是文本文件
'NO'
本文件非文本文件
'UNDEFINED'
无法判断
UNFORMATTED=fmt
查看文件是否是二进制文件,返回字符串,可以是:
'YES'
本文件是二进制文件
'NO'
本文件非二进制文件
'UNKNOWN'
无法判断
RECL=length
返回
open
文件时
< br>recl
栏的设置值。
NEXTREC=nr
返回下一次文件读写的位置。
-
-
-
-
-
-
-
-
-
上一篇:常见英语缩略式(Contraction)
下一篇:HTML中显示特殊字符