(完整版)fortran文件操作
- 格式:doc
- 大小:35.77 KB
- 文档页数:8
6 Fortran 程序设计6-文件在Fortran程序设计中,文件操作是非常重要的一部分。
通过文件操作,可以实现数据的读取和写入,以及数据的存储和处理。
本文主要介绍Fortran程序设计中与文件相关的操作。
文件的打开和关闭在Fortran中,可以使用OPEN语句打开一个文件,并使用CLOSE语句关闭文件。
以下是打开文件和关闭文件的示例代码:fortranOPEN(unit=10, file='data.txt', status='old',action='read')! 打开名为data.txt的文件,使用编号为10的单元,以只读方式读取文件内容! 进行读取操作CLOSE(unit=10)! 关闭编号为10的文件单元OPEN语句中的unit参数是文件的编号,file参数是文件的路径和名称,status参数指定文件的打开模式,action参数指定文件的操作方式。
常用的status参数值包括:'old'(读取现有文件)、'new'(创建新文件)、'replace'(替换现有文件)等。
文件的读取和写入在Fortran中,可以使用READ语句从文件中读取数据,使用WRITE语句将数据写入文件。
以下是读取文件和写入文件的示例代码:fortranREAD(unit=10, fmt=) variable1, variable2,! 从编号为10的文件单元中读取数据,并将数据存储到相应的变量中! 进行处理操作WRITE(unit=20, fmt=) variable1, variable2,! 将变量的值写入编号为20的文件单元中READ语句中的unit参数是文件的编号,fmt参数是数据的格式。
通常使用表示自由格式,即根据数据的类型自动判断格式。
WRITE语句的unit参数和fmt参数的含义与READ语句相同。
文件的定位在处理大型文件时,有时候需要跳过一部分数据或者回到文件的开头位置。
1 FORTRAN77四则运算符+ - * / ** (其中**表示乘方)在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→()2 FORTRAN77变量类型2.1 隐含约定:I—N规则凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。
2.2 用类型说明语句确定变量类型:可以改变I—N规则2。
3 用IMPLICIT语句将某一字母开头的全部变量指定为所需类型如 IMPLICIT REAL (I,J)三种定义的优先级别由低到高顺序为:I—N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。
2。
4 数组的说明与使用使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(—1:0),A(0:2,0:1,0:3)REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如WRITE(*,10) ('I=’,I,’A=’,A(I),I=1,10,2)10FORMAT(1X,5(A2,I2,1X,A2,I4))2。
5 使用DATA语句给数组赋初值变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如DATA A,B,C/—1.0,-1。
0,—1。
0/DATA A/-1.0/,B/-1.0/,C/—1。
0/DATA A,B,C/3*-1.0/CHARACTER*6 CHN(10)DATA CHN/10*’’/INTEGER NUM(1000)DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/3 FORTRAN77程序书写规则程序中的变量名,不分大小写;变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效;一行只能写一个语句;程序的第一个语句固定为PROGRAM 程序名称字符串某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容;某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容;某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行;某行的第7至72字符位为语句区,语句区内可以任加空格以求美观;某行的第73至80字符位为注释区,80字符位以后不能有内容.4 FORTRAN77关系运算符。
1) 实例3 —求多个半径下的圆周长 ! z3.f90 --Fortran95 FUNCTIONS:-Entry point of con sole application.I*************************************************************************PROGRAM: z3PURPOSE: En try point for the con sole applicati on.I************************************************************************program z3 !求多个半径下的圆周长 !主程序! PROGRAM Z3PRINT *, 'R=',1.2,'C=',C(1.2) PRINT *, 'R=',3.4,'C=',C(3.4) PRINT *, 'R=',15.6,'C=',C(15.6) PRINT *, 'R=',567.3,'C=',C(567.3) END program z3 !子程序FUNCTION C(R) PI=3.1415926 C=2*PI*R RETURN ! Body of z3 endz3•■Alta• JSwFta.■■ TTjn* FMIIH-.T jd - |叭■(Lld4ilh■ Hi li tii.IW M H MvfriiMfeai Iwi Ji JJII+M4Tml+n««I*界rFHtlE- HfrtpliK * W mita itflLuLfl-PRINT* ,'以上为计算机的计算结果,注意 B 的值'ZXZ I O.f90 FUNCTIONS: ZXZ_I_O- Entry point of con sole applicati on.PROGRAM: ZXZ_I_OPURPOSE: En try point for the con sole applicati on.program ZXZ_I_O implicit none!变量声明的位置INTEGER(2) i; INTEGER(4) j; INTEGER(4) m; REAL n INTEGER A,B PRINT*,'输入整数 A'; READ*, A PRINT*,'输入整数 B'; READ*, B B=A+BWRITE(*,*) 'A*B=',A*B实例4 —键盘与显示器输入/输出2)a) Fortra n 基本操作1 B Li PlLu- i \ JfiL ■ I■' hi -IJBL . n :»'匹:"b )程序指令BIE1A J~. C ■* «I*************** 输入、输出样式种种 **************************!系统默认的输出样式 PRINT* ,'系统默认的输出样式' !人为控制的的输出样式--格式化输出 i=21; j=53; m=5 n=(i+j*m*i**m) WRITE(*,*) 'i,j,m 是常量,程序赋初值PRINT*, i,j,m WRITE(*,*) 'i,j,m 的计算结果:'PRINT*,'i+j*m*i**m=' ,nPRINT* ,''! Body of ZXZ_I_O end program ZXZ_I_O 程序说明: 程序赋值一初始化 i=21; j=53; m=5 键盘无格式输入 READ*, A 键盘有格式输入 READ ( *, 100)A,B,C 100 FORMA T( 2F5.2,F5.3) 显示器无格式输出PRINT* ,'系统默认的输出样式' WRITE(*,*) 'A*B=',A*B 显示器有格式输出 PRINT 100 ,A+B WRITE(*,100) 'A*B=',A*B 100 FORMA T( F5.2)C )调试运行d )程序指令pruqrdiri ZX2_l_0 iflnpllclt iioiiv 陝量声明的立置IHTEGERfZ) i; IMTEGEimi ]; IHTEGER(^)叭 REAL nA.B I Uairidbles■HIKE J 播入整該■打1E.D 屯A PRINT •,-KM«a■ e-fltBFHJHIv T -H-Ai-B-1 ,ti' Axb- 1 T A I UHU NA 「臥存为计負机药计貝韭呆*妊憲L1的低・1-21; j-b3;«R[TEC-,«) l,j,n 是常最.程序Itt 前值・FHIHTa, 1 J ,■WR1TF(-F -J l p j,n 的tt 幣结黑,.FHim* /■r u 讪o#畑」」Ffirl prnni'an ZK? I o! ZXZ丄O.f90! FUNCTIONS:ZXZ_I_O - Entry point of con sole applicati on.PROGRAM: ZXZ_I_OPURPOSE: En try point for the con sole applicati on.1 *************** 输^入 ^输出样式种不中program ZXZ_I_Oimplicit none!变量声明的位置INTEGER(2) i; INTEGER(4) j; INTEGER(4) m; REAL nINTEGER A,BREAL X,Y ,Z ! VariablesPRINT*,'输入整数A'; READ*, APRINT*,'输入整数B'; READ*, B PRINT*,'计算结果为:'B=A+BPRINT*,'B=A+B=',BWRITE(*,*) 'A*B=',A*BPRINT* ,'以上为计算机的计算结果,注意B的值'!系统默认的输出样式PRINT* ,'系统默认的输出样式'PRINT*,'输入实数X'; READ(*,100) XPRINT*,'输入实数Y:READ(*,100) Y100 FORMA T(F5.2)PRINT*,'计算结果为:'Z=X+YPRINT 200,Z200 FORMA T(4X,'Z=X+Y=',F8.3)WRITE(*,*)WRITE(*,300) X*Y300 FORMA T(4X,'Z=X*Y=',F8.3)!人为控制的的输出样式--格式化输出PRINT* ,'程序为常量赋了初值'i=21; j=53; m=5n=(i+j*m*i**m)WRITE(*,*) 'i,j,m 是常量,程序赋初值PRINT*, i,j,mWRITE(*,*) 'i,j,m 的计算结果:'PRINT*,'i+j*m*i**m=' ,nPRINT* ,' '! Body of ZXZ_I_Oend program ZXZ_I_Oe)调试运行rRIHT* JPRTNi*. ■讦薛结果为.・ E^A*BPRTNT*,,R=A+R=,,8 URrfEfw,*) 'ft-D-1t A-DPRINT * J 以上药i1■宴利的iT 畀结果.傢金默认囱馥出择畫PRINT*「系唏默认册葆出样式・ 阳IHH. •揃扎斓 W : WIHZJ 输入宪数V;1B0 F0RHAKF5.2)PRINT -,■廿尊结杲为FREAD(*,1ua ) K R 匚flD(*,100) VPRINT 2Q0左2(JU FUKMfil(4i(t ; = «+/= \FB »J) unrrEf*.*)WRITE(*r 30O) X*V FORMfiT(UX /? = X*V=* ,F8 .3}认为扌前函的输世#戎一逼占化输出PRTHT- ”囉序対常豊瓯了初值・ i^Z» i j=53;I1=5 n=(i +j*m*i**n)WRITEf"^) 'i t j t n 是常量,程序赋初值 PRTHTw, i r j F nMRlTEe 』)・i J,n 的计具结衆:,PRI HI*.'i+j *R*i**m=',n。
Fortran中批量处理文件的方法总结—循环读取目录下的所有符合条件的文件一、简单的介绍在一年之前,我写过一个程序,主要是对Micaps资料进行批量处理,将逐日资料处理为旬、月的数据,在那个程序中,始终有一个问题困扰我,就是如何自动生成该读取的下一个文件名,这使我真正开始关注fortran中的批处理,时隔一年,决定写下这些文字,将我用到的一些fortran批处理的方法和大家共享,交流。
对于那些只要会用程序,不求其中原理的朋友,请马上跳过这些文字,直接去下载附件吧!程序里有使用说明,但是,如果你不懂原理,估计现成的程序你使用起来也会碰壁哦!这里所说的批处理是指对某一个目录下的指定后缀的文件的批量读取和处理。
我总结的批处理方法大概可以用下面这个示意图来说明:|||将文件目录写入一个文本文件,供fortran循环读取|————手动输入文件名|————运行程序之前命令行工具导出文件名|————程序运行后,未开始计算之前,生成文件名| ————调用CMD命令生成| ————GETFILEINFOQQ方法生成| ————调用WIN32API生成||在程序运行时动态生成文件名||对于第一种方法,我将主要介绍如何将目录写入文件,然后举出一个小的示例来验证。
第二种方法主要是说明其思路。
二、方法的介绍1、将文件目录写入一个文本文件,供fortran循环读取1.1、手动输入文件名这是最基本的方法啦,如果文件个数不多,而且文件名中包含了空格等特殊字符的话,建议使用这种方法,在这里就不多说啦,至于在fortran中的处理,等几个小方法介绍完之后会有一个例子来说明。
1.2、运行程序之前命令行工具导出文件名这是一个既高效又保险的方法,主要思路就是通过强大的CMD命令列出目录下的文件到一个指定的文件中,然后由fortran去循环读取该文件中的文件名信息,从而批量处理。
a、从运行工具打开你的CMD窗口;b、转到要处理的当前目录(可省略):CD /d 路径,如:CD /d e:\test这样可以快速到达e:\test目录c、使用DIR命令列出文件目录信息到指定的文件,通常使用的Dir *.*>新文件名这个命令在这里已经不能满足要求,因为会列出一堆对于我们处理而言无用的信息,现在要使用的命令是:DIR /b filter>newfile注意,其中的filter为文件筛选,必须自己修改为所需的,比如你可以把它改成*.txt,这样,就会列出当前目录下的所有txt结尾的文件了。
6 Fortran 程序设计6-文件6 Fortran 程序设计-文件6.1 引言本章将介绍如何在Fortran程序中处理文件输入和输出。
文件输入和输出是Fortran程序中常见的操作,可以用于读取外部数据、将结果写入文件等。
本章将介绍如何打开、关闭、读取和写入文件,并提供一些常用的文件操作示例。
6.2 文件的打开和关闭在Fortran中,可以使用OPEN语句打开一个文件,使用CLOSE语句关闭一个文件。
打开文件时,需要指定文件名、打开模式和文件单元号。
关闭文件时,只需要指定文件单元号即可。
6.2.1 打开文件打开文件的语法如下:OPEN(unit=, , status=status, iostat=iostat)其中,unit是文件单元号,file是文件名,status是文件的打开模式,iostat是一个可选的参数,用于返回执行结果。
status的取值有以下几种:- 'OLD':打开一个已存在的文件,该文件必须已经存在,否则会报错。
- 'NEW':创建一个新文件,如果文件已存在,则会清空文件内容。
- 'UNKNOWN':打开一个已存在的文件,如果文件不存在,则会创建一个新文件。
- 'REPLACE':创建一个新文件,如果文件已存在,则会替换原文件。
打开文件成功后,文件单元号将被用于后续的文件操作。
6.2.2 关闭文件关闭文件的语法如下:CLOSE(unit=, status=status, iostat=iostat)其中,unit是文件单元号,status是一个可选的参数,用于指定关闭文件时的操作。
status的取值有以下几种:- 'KEEP':保留文件,不清空文件内容。
- 'DELETE':删除文件。
文件关闭成功后,文件单元号将无法再用于文件操作。
6.3 文件的读取和写入在Fortran中,可以使用READ和WRITE语句进行文件的读取和写入操作。
1.建立新的运行空间File>new>workspace>new>prject>console application>new>file>free-form2.建立多个文件可以把子程序文件和主程序文件放在同一个source文件下3.建立外部文件用于读写数据Open(1,file=’ exam.txt ‘)用于打开文件,其中1为设备号——用一整数表示,exam.txt为要打开的文件名,文件有文件名和文件类型构成,文件名可给出路径如file=’ D:\exam\exam.txt ‘Write(1,*)’学生的成绩为:’用于在写在前面打开的1文件里写数据,其中*和0、5、6是系统预定义的设备号由系统隐含规定。
一个文件名只能和一个设备号建立联系,同样一个设备号也只能与一个文件建立联系,一个通过OPEN语句打开并指定了设备号的文件不能再次用OPEN语句打开Read(1,*)表示从文件里面读取数据,一次读取一个数据,数据间用逗号隔开每隔一个read语句或write语句默认的换一行读入或写入Write(1,”(‘输入’)”)=write(1,*) ‘输入’Write(1,”(‘I3,’输出’,I7)”) x,y结果是x以3个整型字符输出,输出,y以7个整型输出Read(1,100)或write(1,100)I,j,k 100 format(I3,I7,F6)表示按照100语句的格式读入或输出顺序读写数据:Read(uint设备号,fmt格式说明,end结束语句转移,eor错误语句转移)输入数据可以按规定的域宽输入,也可以用逗号强制间隔,1.使用read语句读取数据时,read语句输入表中的数据类型和格式应该与当前指针位置数据类型和格式一致。
2.使用read语句读取数据时,从当前文件指针开始读取,完成读取后文件指针自动后移一个记录,使用OPEN和REWIND语句时,文件指针指向第一个记录,从第一个记录开始读取。
forrtran中文本文件读写方法
在Fortran中,文本文件的读写可以通过使用OPEN和WRITE函数来实现。
首先,要明确要操作的文件的类型。
文本文件可以显示所有的字符,通常由行通过换行符(CRLF、CR或LF)隔开,列由间隔符(空格、逗号或TAB)隔开。
Fortran中称为有格式文件,有两种读取方式:顺序读取和直接读取。
对于顺序读取,可以使用以下语句打开文件:
```fortran
open(unit=fileid, file=filename, access="sequential")
```
其中,`unit`指定了文件的位置,`file`是文件名,`access`指定了文件的访问方式。
对于直接读取,可以使用以下语句打开文件:
```fortran
open(unit=fileid, file=filename, access="direct", recl=record_length) ```
其中,`recl`指定了每次读取的记录长度。
在写入文件时,可以使用以下语句:
```fortran
write(unit, fmt, nml=namelist) var1, var2, ...
```
其中,`unit`指定了文件的位置,`fmt`是格式化字符串,`nml`是命名列表,`var1, var2, ...`是要写入文件的变量。
需要注意的是,在使用Fortran进行文本文件读写时,需要注意文件的格式和编码方式,以及换行符和间隔符的使用。
此外,Fortran中的文本文件读写通常适用于较小的文件,对于较大的文件,建议使用二进制文件读写的方式。
摘要:FORTRAN数据文件的结构及用C语言直接对FORTRAN数据文件进行数据读取和处理的方法,并结合实例,给出了完成操作的C语言源程序。
关键词:C语言FORTRAN数据文件数据直接读写FORTRAN语言适用于数值计算,在科学和工程计算方面发挥了重要作用。
C语言具有很强的通用程序设计功能,而且很适于处理图形图像、系统程序方面的问题,但它的数值计算能力不如FORTRAN语言。
如果能在C语言程序中直接调用FORTRAN程序的计算结果,则可充分利用这2种语言的优势。
为此,有必要建立用C语言对FORTRAN数据文件进行直接读取和处理的方法。
1 FORTRAN数据文件的结构在C语言程序中调用FORTRAN程序的计算结果,可通过FORTRAN数据文件来实现,而要用C语言直接存取FORTRAN数据文件,必须首先清楚FORTRAN数据文件的结构。
FORTRAN数据文件按存取方式的不同可分为顺序文件和直接文件。
而不论是顺序文件还是直接文件,按数据在文件中的存放方式的不同,都有2种存放形式,一种是字符形式(即ASCII码形式),另一种是二进制代码形式。
前者称为有格式存放,后者称为无格式存放。
由于对直接文件存取的基本操作步骤与对顺序文件存取的基本操作步骤相同,二者的不同主要体现在操作时是否应顺序进行。
下面以顺序文件为例进行具体分析。
1.1 有格式文件的结构有格式文件全部由有格式的记录组成,有格式的记录是字符的序列,以ASCII码形式存放。
各记录以回车符(0DH)和换行符(0AH)作为结束标志,各记录之间无分隔符,各记录的长度(字节数)可以不等。
1.2 无格式文件的结构无格式文件全部由无格式记录组成,无格式记录是值的序列,即二进制代码序列。
这种格式的文件,其第1个字节是4BH(即十进制的75),最后1个字节为82H(即十进制的130),各无格式记录的数据信息位于这2个字节之间。
每一个无格式记录都由下面3部分组成:(1)记录的首字节,是该记录所有数据所占的字节数;(2)组成该记录的各数据内容。
上机环境一.上机环境FORTRAN语言程序设计的上机环境如下:1.硬件环境微型计算机(Intel X86系列CPU)一台。
2.软件环境∙Windows98/2000/XP操作系统;∙任意一种文本编辑器(EDIT.exe、NOTEPAD.exe、TC.exe等);∙FOR5.1编译器二.上机步骤1.设置环境变量假设将FOR5.1安装在D:\,则上机前用如下的命令设置环境变量:PATH D:\FOR5\BIN;%PATH%SET LIB=D:\FOR5\LIB2.建立FORTRAN源程序建立FORTRAN源程序可以使用EDIT或NOTEPAD(记事本)文本编辑器,使用方法同Microsoft Office Word。
3.用FL.EXE编译连接源文件将源程序编译为可执行文件的方法,有两种情况:第一种:将编译和连接一次完成,命令如下:FL 源程序名回车后开始编译)例:FL Y.FOR (没有错误,将产生Y.EXE文件)第二种:先将每个程序编译成目标文件(.OBJ),再将多个文件连接装配成可执行文件(.EXE)文件,这时命令分为两步:第一步:FL /C 源程序名(产生目标文件)第二步:FL 目标文件1+目标文件2 /LINK(产生.EXE)例: FL/C Y1.FOR (没有错误,将产生Y1 .OBJ)FL/C Y2.FOR (没有错误,将产生Y2 .OBJ)然后,将两个目标文件连接生成可执行文件:FL Y1.OBJ+Y2.OBJ /link (没有错误,将产生Y1.EXE文件)4.运行程序建立了EXE文件后,就可以直接在DOS下运行此程序,如下所示:C:>Y〈回车〉程序运行结束后,返回DOS。
如果运行结果正确,那么程序运行结束时结果会直接显示在屏幕上。
如果不正确,则从1开始修改程序。
目录上机一顺序程序设计 (1)一.上机目的 (1)二.上机内容 (1)三.上机要求 (2)四.思考题 (2)上机二分支结构程序设计 (3)一.上机目的 (3)二.上机内容 (3)三.上机要求 (4)四.思考题 (4)上机三循环结构(一) (5)一.上机目的 (5)二.上机内容 (5)三.上机要求 (6)四.思考题 (6)上机四循环结构(二) (7)一.上机目的 (7)二.上机内容 (7)三.上机要求 (8)四.思考题 (9)上机五数组(一) (10)一.上机目的 (10)二.上机内容 (10)三.上机要求 (11)四.思考题 (11)上机六数组(二) (12)一.上机目的 (12)二.上机内容 (12)三.上机要求 (13)四.思考题 (14)上机七字符数据(一) (15)一.上机目的 (15)二.上机内容 (15)三.上机要求 (17)四.思考题 (17)上机八字符数据(二) (18)一.上机目的 (18)二.上机内容 (18)三.上机要求 (20)四.思考题 (20)上机九子程序(一) (21)一.上机目的 (21)二.上机内容 (21)三.上机要求 (23)四.思考题 (23)上机十子程序(二) (24)一.上机目的 (24)二.上机内容 (24)三.上机要求 (26)四.思考题 (26)上机十一文件(一) (27)一.上机目的 (27)二.上机内容 (27)三.上机要求 (27)四.思考题 (27)上机十二文件(二) (28)一.上机目的 (28)二.上机内容 (28)三.上机要求 (28)四.思考题 (28)上机十三综合设计 (29)一.上机目的 (29)二.上机内容 (29)三.上机要求 (31)四.思考题 (31)上机一顺序程序设计一.上机目的1、掌握编程、编译、连接过程。
第8章 FORTRAN语言的文件操作在前面介绍的程序中,结果都是输出在屏幕上,数据都是通过键盘送入内存单元,实际上数据的输入/输出也可在磁盘上。
如图所示:FORTRAN中对文件的存取以记录为单位,即:输出时:一个输出语句的数据就是一个记录,叫写入文件。
输入时:一个输入语句需要的数据就是一个记录,叫读出文件。
本章讨论FORTRAN程序的文件操作,也就是FORTRAN程序对磁盘数据文件的操作——读/写方式,并描述数据文件的记录结构,以及在程序设计中怎样建立,使用这些数据的记录结构。
8.1文件的概念8.1.1 文件的分类1)按记录存储结构分:顺序文件:文件记录存储按照时间顺序依次存放,记录的逻辑次序与物理顺序是一致的,不能随意读或取某个记录,必须从首记录开始访问。
直接文件:又叫随机文件,记录存放按记录号完成。
2)按记录数据存放格式分:有格式文件:记录以字符形式(或称ASCII码形式)存储,文件的数据流由一个个的字符组成,每个字符占据一个字节,每条记录用回车和换行符作为结束符,可以用文本编辑器(如记事本)直接打开查看。
无格式文件:数据以计算机内部的二进制代码形式存放。
如果用文本编辑器直接打开查看,只能看到乱码符号。
二进制文件:这是Microsoft的一种扩充模式,数据按其在内存中的存储形式存储在文件中,其数据流由二进制代码形式的一个个字节组成,结构最紧凑,适合保存大容量的数据。
用文本编辑器直接打开查看也只能看到乱码。
归纳起来,FORTRAN语言的文件可以分为:有格式(顺序文件、直接文件、二进制文件);无格式(顺序文件、直接文件、二进制文件);8.1.2 文件的操作1)文件记录定位文件在存取过程中,有一个文件指针控制着读写的位置,它总是指向当前进行输入或输出的那个记录,也可以通过语句拨动指针的位置。
2)文件操作的过程打开文件:要求机器分配一个供该文件使用的I/O缓冲区。
读或写文件:将数据通过分配的I/O缓冲区向文件中读写记录。
Fortran文件知识点Fortran(Formula Translation)是一种高级编程语言,专门用于科学和工程计算。
它于20世纪50年代初由IBM公司开发,并成为第一种被广泛应用的程序设计语言。
Fortran文件是指使用Fortran语言编写的源代码文件,其中包含了Fortran程序的逻辑和算法。
在本文中,我们将逐步介绍Fortran文件的知识点,帮助读者了解如何编写和使用这种文件。
第一步:文件结构Fortran文件通常由以下几个部分组成:1.程序声明:用于声明程序的名称和目的,以及引入外部模块或库文件。
2.变量声明:用于声明程序中使用的各种变量,包括整数、实数、字符等类型。
3.主程序:包含实际的计算逻辑和算法,用于执行特定的任务或解决问题。
第二步:文件扩展名Fortran文件通常使用.f或.f90作为文件扩展名。
.f扩展名是Fortran 77的标准,而.f90扩展名是Fortran 90及更高版本的标准。
这些扩展名有助于编译器识别文件类型并选择正确的编译方式。
第三步:编写Fortran文件编写Fortran文件可以使用任何文本编辑器,例如记事本、Sublime Text、Visual Studio Code等。
以下是一个简单的Fortran文件示例:program helloimplicit nonecharacter(10):: namewrite(*,*)'请输入您的名字:'read(*,*) namewrite(*,*)'您好,', trim(name), '!'stopend program hello在这个示例中,我们定义了一个名为hello的主程序,其中包含一个字符类型的变量name。
程序首先向用户请求输入姓名,然后输出一个问候语。
最后,程序通过stop语句终止运行。
第四步:编译和运行Fortran文件要编译Fortran文件,我们需要使用特定的编译器。
fortran文件操作From: 《Fortran 95 程序设计》彭国伦1.文件读取的概念:读取:“顺序读取”和“直接读取”。
保存:“文本文件”和“二进制文件”。
二进制文件:读取快,因为保存格式和数据在内存中的保存方法一样,同时也节省空间。
----------------------------------2. 文件的操作:----------------------------------open的使用:使用open命令打开文件之后,就可以对文件来做输入输出。
example:program ex0901impicit noneopen(unit=10, file='hello.txt') ! 打开hello.txt文件, unit指定文件代码,file 指定文件名称。
write(10, *) "hello" !在代码为10的文件中写入hellostopend program ex0901open中有很多参数可以使用,详细如下: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':指定要打开的文件名称,文件名要符合系统规定。
fortran文件操作From: 《Fortran 95 程序设计》彭国伦1.文件读取的概念:读取:“顺序读取”和“直接读取”。
保存:“文本文件”和“二进制文件”。
二进制文件:读取快,因为保存格式和数据在内存中的保存方法一样,同时也节省空间。
----------------------------------2. 文件的操作:----------------------------------open的使用:使用open命令打开文件之后,就可以对文件来做输入输出。
example:program ex0901impicit noneopen(unit=10, file='hello.txt') ! 打开hello.txt文件, unit指定文件代码,file 指定文件名称。
write(10, *) "hello" !在代码为10的文件中写入hellostopend program ex0901open中有很多参数可以使用,详细如下: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' 输出字符串内容会在前后加上单引号-----------------------------------------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'时,才可以使用这个字段。
它会把这一次输出入的字符数目设置给后面的整型变量。
----------------------------------查询文件的状态INQUIRE:在使用open打开文件的前后,都可以通过inquire命令来查询文件目前的情况,inquire 命令中的各个字段和第一小节中open的字段很类似。
example: !检查某个程序是否存在program ex0903implicit nonecharacter(len=20) :: filename = "ex0903.f90"logical aliveinquire(file=filename, exist=alive)if(alive) thenwrite (*, *) filename, " exist."elsewrite (*, *) filename, "doesn't exist."end ifstopedn program ex0903详细介绍inquire的使用方法: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 发生错误时会转移到复制的代码行继续执行程序。