本次推文主要内容:在Fortran中如何正确使用文件操作?
在代码语言的初步学习阶段,大家在进行数据的输入和输出时。一般都是在键盘键入和屏幕上输出,当处理较大文件时,使用文件操作往往会更方便一点。
Fortran语言中的基础文件操作主要使用了OPEN
、READ
、WRITE
,其他的命令在遇到后可上网自行搜索,本文将围绕提及到的三个语句进行解释,最后基于Abaqus预置的文件通道号进行说明。
【特别注明】:本文使用到的Fortran算例来源于《Fortran程序设计权威指南》——白海波
为了更加直观的了解语法,我们直接上代码,一行一行解析~
代码片
PROGRAM Ex1002
IMPLICIT NONE
INTEGER::n
!输入学生数量
PRINT *,'请输入学生数量:'
READ *,n
!调用子程序
CALL writeData(n)
END
!向文件中写入数据
SUBROUTINE writeData(n)
IMPLICIT NONE
!变量定义
INTEGER :: i
INTEGER::n
REAL,ALLOCATABLE::math(:),english(:),physics(:),fortran(:)
CHARACTER(LEN=20),ALLOCATABLE::name(:)
!文件打开
OPEN(10,FILE='file1002.txt')
!为数组分配内存
ALLOCATE(math(n),english(n),physics(n),fortran(n),name(n))
!向文件中写入数据
DO i=1,n
WRITE(*,100),i
READ*,name(i),math(i),english(i),physics(i),fortran(i)
WRITE(10,200),name(i),math(i),english(i),physics(i),fortran(i)
ENDDO
!关闭文件
CLOSE(10)
!I/O格式
100 FORMAT('请输入第',I3,'位同学的姓名及数学、英语、&
物理、Fortran语言的成绩:')
200 FORMAT(A10,4F6.2)
END SUBROUTINE writeData
代码解读:
该程序由主程序和子程序组成,将数据写入文件操作编制为一个子程序,在主程序中call
一下,使得代码整体上更为简洁易读;
READ *,n
该行代码中的*
表示通道号,该通道指向屏幕显示,意思是在屏幕上显示读取数据;
OPEN(10,FILE='file1002.txt')
该语句中OPEN
表示打开一个文件进行读写,10
表示文件与设备相连接的通道号,注意到,一个文件对应一个通道号,可以自己任意指定;FILE='file1002.txt'
将在该文件路径下生成一个file1002.txt
文件;
CLOSE(10)
当文件使用完毕后,可使用CLOSE
语句断开和设备的连接,释放文件所占用的空间;
READ*,name(i),math(i),english(i),physics(i),fortran(i)
和WRITE(10,200),name(i),math(i),english(i),physics(i),fortran(i)
将屏幕读取的数据写入到文件中;
WRITE(10,200)
写到文件号为10
号的文件中,并按照行代码为200
的格式进行输出;
200 FORMAT(A10,4F6.2)
该行前面的数字表示行代码,供WRITE
输出格式使用,FORMAT
后跟的格式化语句详细可点击跳转往期推荐。
小结:以上解释总结了文件操作的常用语法,初学者掌握至此就可以了,以后再遇到别的情况,二话不说,直接上网搜。
再插入一段小插曲,用户在进行子程序开发的过程中,可能会用到文件操作,但是有时候明明按照Fortran语法来的,但还是没有得到自己想要的效果,参考了@寒江雪
大佬的推文,给大家一个小方法。
Abaqus作为一个成熟的商业软件,自身默认设置了一些文件通道号,用户在自定义子程序时,若不知道系统默认的文件号,可能会出错,下图是Abaqus官网中给出的默认文件号:
从上图可以看出,Abaqus隐式分析和显示分析中,文件号也会不同,推荐大家将文件号设置为一个较大的数字,如:10010
、10086
等。
往期推荐
相关文章,在仿真秀官网搜索:
Fortran基础编程(入门简介篇)
FORTRAN基础编程(1)——基本格式及输出、读入
FORTRAN基础编程(2)——声明变量
Fortran基础编程(3)——格式化输出
Fortran基础编程(4)——声明与程序结构
Fortran基础编程(5)——Subroutine正确食用方法
Fortran数值计算——矩阵操作函数(可自用)
Simply Fortran 保姆级教程
Fortran编程实例01
Fortran编程实例02
Fortran基础编程——OpenMP并行计算
Fortran基础编程——牛顿拉弗森迭代
关于Fortran编译遇到“The system cannot find the path specified.”的情况说明