FORTRAN文件读写操作 from《FORTRAN95 程序设计》
1、文件读写操作,对于用户来讲按照文件类型可以分为文本文件和二进制文件两种,在使用OPEN或者WRITE函数进行读写时首先要明确的是要操作的文件的类型,另外FORTRAN可以按顺序读写,同样可以直接读写,直接读写类似于我们用CD机听音乐时可以直接跳到我们要听的部分。读写函数一OPEN函数为例:
open(unit=fileid, file=filename, access="direct",recl=4, status="replace")
表明要读的文件名称为filename的文件,采用直接读取方式,一次读取的文件容量是4字节,status=“replace”表明文件存在就覆盖,不存在就创建新的文件。
WRITE/OPEN(UNIT=number,FMT=format,NML=namelist,REC=record,IOSTAT=stat,ERR=errlable,END=endlabel)
UNIT指定READ/WRITE所用的输入输出位置,注意一般避免用1,5,2,6,因为上述为默认的输入和输出即键盘和屏幕。
FMT是输入输出格式化字符
REC是在直接读写中设置要读写的文件块的位置
另外一个例子如下:直接读写文本文件list.txt,值得注意的是open函数中recl=6,这里是因为list文本中每一行只有一个浮点数记录,占4个字节,但是由于在微软的操作系统中文本文件每行结尾有两个看不见的符号表示文件当行结束,因此每行记录是4+2,这个数值在UNIX系统中是4+1,因为UNIX系统只需一个字符表示当前行结束标志。
program ex0910implicit noneinteger, parameter :: fileid = 10character(len=20) :: filename = "list.txt"integer playerreal hitinteger errorlogical alive
......
......open(unit=fileid, file=filename, access="direct",form="formatted", recl=6, status="old")do while(.true.)write(*,"('查询第几棒?')")read (*,*) playerread(fileid, fmt="(F4.2)", rec=player, IOSTAT=error) hitif ( error/=0 ) exitwrite(*,"('打击率:'F4.2)") hitend doclose(fileid)stop
end program
2、用INQUIRE查询文件的状态,下面的例子用来检查文件名为ex0903.f90的文件是否存在。
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 ifstop
end
当然INQUIRE使用方法很多 ,
INQUIRE(UNIT=number,FILE=filename,IOSTAT=stat,ERR=errlable,EXISIT=exist,OPENED=opened,ACCESS=access,DIRECT=direct)。
请注意上述有的是字符串类型例如direct、access等有的为逻辑值如exist和opened。
3、字符串变量文件,作用是把数据写到一个字符串变量中,例如:
program ex0914implicit noneinteger :: a=2integer :: b=3character(len=20) :: stringwrite( unit=string, fmt="(I2,'+',I2,'=',I2)" ) a,b,a+bwrite(*,*) stringstop
end program
执行结果是2+3=5;
应为有的时候我们要从键盘输入数值给程序,但是不小心输入了字母等会造成意想不到的错误结果,为了检查我们从键盘的输入结果就可以使用 暂时把数据当字符串,然后调用函数检查这个字符串,若都是数字字符,就把它转化为整数。
另外一个用法是动态改变字符串内容的输入输出格式下面是一个例子:
program ex0917implicit noneinteger a,bcharacter(len=20) :: stringcharacter(len=20) :: fmtstring="(I??'+'I??'='I??)"integer,external::GetIntegera=GetInteger()b=GetInteger()write(fmtstring(3:4),"(I2.2)") int(log10(real(a))+1) !计算数字a的数值位数,并修改格式化字符串write(*,"('a:',A20)") fmtstring !输出修改的格式化字符串write(fmtstring(9:10),"(I2.2)") int(log10(real(b))+1) !计算b的位数,然后修改格式化字符串write(*,"('b:',A20)") fmtstring !输出修改的格式化字符串write(fmtstring(15:16),"(I2.2)") int(log10(real(a+b))+1) !计算a+b结果的位数修改格式化字符串write(*,"('a+b:',A20)") fmtstringwrite(*,fmtstring)a,b,a+bstop
end program
integer function GetInteger()implicit nonecharacter(len=80) :: stringlogical :: invalidinteger i, codeinvalid = .true.do while( invalid )write(*,*) "输入正整数"read(*, "(A80)" ) stringinvalid = .false.do i=1, len_trim(string)code = ichar(string(i:i))if ( code<ichar('0') .or. code>ichar('9') ) then invalid=.true.exitend if end doend doread( string, * ) GetIntegerreturn
end function
运行结果
4、NAMELIST
FROTRAN90统一了NAMELIST的标准,可以把一组相关的变量封装在一起,在输入输出时只要在WRITE中NML字段赋值哪一个NAMELIST就行了,例如:
program ex0918implicit noneinteger :: a = 1, b = 2, c = 3namelist /na/ a,b,c !把变量abc放到名字为na的NAMELIST ,是声明的一部分write(*,nml=na) !输出na封装的变量stop
end program
执行后的结果
&NA
A = 1, !输出变量名 等号 数值
B = 2,
C = 3
/ !最后用/号最为结束
NAMELIST一可以用来输入变量值,但要注意输入变量值时采用的固定格式:以&开头以/结束,例如
program ex0919implicit noneinteger :: a, b, cnamelist /na/ a,b,cread (*,nml=na) write(*,nml=na) stop
end program
输入时可以不必按照变量声明的顺序,例如 &NA a=1 c=3/ 。
同样可以从文本文件中读取NAMELIST的内容。
FORTRAN文件读写操作 from《FORTRAN95 程序设计》相关推荐
- java大文件读写操作
转载自:http://blog.csdn.net/akon_vm/article/details/7429245 RandomAccessFile RandomAccessFile是用来访问那些保存数 ...
- C++ builder 的文件读写操作总结
C++ builder 的文件读写操作总结 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1.基于 ...
- unity webgl读写txt文件_python Files文件读写操作
今天学习python的Files文件读写操作,并记录学习过程欢迎大家一起交流分享. 首先新建一个文本文件test.txt,内容如下: hello worldhello youhello mehello ...
- java文件读写操作类
借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内 ...
- OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作
OpenCV学习笔记(四):XML,YAML(.txt,.doc)文件读写操作 一.Write_XML_and_YAML_File(写入XML) #include <opencv2/opencv ...
- Python 文件读写操作-Python零基础入门教程
目录 一.Python 文件的打开 open 二.Python 文件的关闭 close 三.Python 文件的读取 read 1.read 函数 2.readline 函数 3.readlines ...
- 【转】Android - 文件读写操作 总结
Android - 文件读写操作 总结 原文出处:http://blog.csdn.net/ztp800201/article/details/7322110 在android中的文件放在不同位置,它 ...
- php中文件读写总结,PHP中文件读写操作
PHP中文件读写操作 PHP中提供了一系列的I/O函数,能简捷地实现我们所需要的功能,包括文件系统操作和目录操作(如"复制[copy]").下面给大家介绍的是基本的文件读写操作:( ...
- C/C++ 文件读写操作总结
C/C++ 文件读写操作总结 在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1.基于C的文件操作: ...
- IOS 文件读写操作详解及简单实例
iPhone 文件读写操作 1,写文件操作 - (IBAction)btnWrite:(id)sender {//创建文件管理器NSFileManager *fileManager = [NSFile ...
最新文章
- 学Java需要用到的软件快收藏!
- 四则运算计算器的微信小程序_1 界面
- XenApp 6.0/6.5服务优化
- c#rs232与三菱通讯_MCGS 与 FX3U PLC 之间的无线通讯实例
- 适合oracle运行的软件环境,创建最适合的Oracle运行环境
- Java DB中的Java存储过程
- 带有批注的Spring硒测试
- mongo DB for C#
- django-后台管理-表显示相关
- Zookeeper Tutorial 2 -- Programmer's Guide
- NameError: name ‘time‘ is not defined
- 关于map的初级应用
- 药品查询 API数据接口
- win10网信政府版安装.NET Framework3.5
- 小程序添加插屏广告教程
- VS Code 高效“摸鱼”插件推荐
- 计算学生分数的最大值,最小值和总分
- 5分钟NLP-知识问答(KBQA)两种主流方法:基于语义解析和基于信息检索的方法介绍...
- 新媒体运营:2019年微信改版,裂变增长如何做? 黎想
- 根据GPS数据的经纬度取天气预报和地名