Fortran笔记,文件,part2-顺序/直接访问文件,二进制文件
参考资料:彭国论,《Fortran 95程序设计》,2002年
第9章
- 顺序访问文件
- 直接访问文件
- 二进制文件的操作
- 内部文件
1. 顺序访问文件
顺序文件读写时,不能任意赋值到文件的某个位置读写数据,只能从头开始一步步向下进行。改变文件读写位置时,只能一步步地进退,或是直接移回文件开头。
EX0906.F90的实现
! 自定义的student数据结构module typedef!?implicit nonetype studentinteger CH, MA, EN ! 成绩end type studentend module typedefprogram Chapter9use typedef ! student数据结构在该module中被定义implicit none! Page 244, EX0906! write information of student into filecall write2txt()end program Chapter9subroutine write2txt ()use typedefimplicit none! INPUT VARIABLES! LOCAL VARIABLEStype(student), allocatable :: stu(:) ! 数据结构的数组integer :: stu_num ! 学生的个数,即数组大小integer :: alloc_err ! 可变数组是否申请内存成功integer :: counter ! 计数器integer :: unitid = 10integer :: varstatcharacter(len=80) :: filename='data.txt' !文件名称! step1: define the numberwrite(*,*) 'Please define the number of students:'read(*,*) stu_num! step2: allocate the arraryallocate(stu(stu_num), stat = alloc_err)if( alloc_err /=0 ) thenstopend if! step3: read the information from keyboard (you should type them)do counter=1, stu_numwrite(*,*) 'No. ', counterread(*,*) stu(counter)%CH, stu(counter)%MA, stu(counter)%ENend do! step4: write it into the fileopen( unit=unitid, file=filename, access="sequential", iostat=varstat)if(varstat/=0) thenstopend ifdo counter=1, stu_numwrite( unit = unitid, fmt = "( 'No.', I2, /, 'Chinese:', I2, 'Math:', I2, 'English:', I2 )")&counter, stu(counter)%CH, stu(counter)%MA, stu(counter)%ENend doclose( unit=unitid )end subroutine write2txt
2. 直接访问文件
把文件的空间、内容事先分区成好几个同样大小的小模块,这些模块会自动按顺序编号。读写文件时,要先赋值文件读写位置在第几个模块,再来进行读写的工作。
书中所给的例子实用性不大,将进行直接访问文件时的要点摘录如下:
- OPEN命令中设置ACCESS='DIRECT'时,同时需设定RECL字段,即所谓模块的大小。
- ACCESS='DIRECT'时,FORM的默认值是'UNFORMATTED'(即二进制)
- Windoes系统中,文本文件的每一行的行尾都有两个看不见的符号用来代表一行文本的结束。所以一行文本的长度是“这一行文本的字符数量再加上2”。UNIX系统中,行尾又一个看不见的符号来表示文件的结束。
在Notepad++中进行point 3的验证,注意底部状态栏:
Windows(CR LF) length=6, Pos=7
Unix(LF) length=5, Pos=6
3. 二进制文件
OPEN命令中的RECL字段所设置的整数n值所代表的大小会随着编译器不同而改变。有的编译器会视为n bytes(比如G77),有的编译器会视为n*4 bytes(比如Visual Fortran)。 ==> 通过编译设置(RECL)来提高不同编译器间的运行结果是相同的?!
此处给出类似于EX0912.F90的代码
subroutine write2bin()implicit nonereal :: salary(9) = (/1.2, 1.3, 1.2, 1.5, 0.8, 2.0, 2.5, 5.6, 1.8/)integer :: varstat, unitid=10, indexcharacter(len=80) :: filename="list.bin"open( unit=unitid, file=filename, form='unformatted', &access='direct', recl=1, status='replace' )do index=1,9write( unitid, rec=index ) salary(index)end doclose( unitid )end subroutine write2bin
文件大小为36 bytes,使用的ivf(intel visual fortan)编译器
???修改编译器中real类型的默认大小,对文件大小并不起作用(仍旧为36字节),因为小数点后仅跟随一个数字?回顾浮点类型的精度
4. 内部文件
可理解为暂存在内存中的文件,应用场景之一为读取用户输入时,提高容错性。比如,让用户输入整型,但用户输入的是'123acd', '#23&'这类非法输入,可使用内部文件机制对输入进行检查。实现起来,即将用户输入读取为字符串,若符合要求,可将其读取为整型。
integer :: getinteger
character(len=80) :: string! read from default input (keyboard)
read(*,*) string
! check whether string can be converted into integer
read(string, *) getinteger ! notice, unit=string
Fortran笔记,文件,part2-顺序/直接访问文件,二进制文件相关推荐
- linux 访问文件软件,Linux下访问文件的基本模式
Linux下访问文件的基本模式 发表于:2013-10-09来源:IT博客大学习作者:edsionte点击数: 访问文件的操作主要是指读文件和写文件,下文简单说明内核中几种常见的访问文件的方式. 访问 ...
- linux 文件-s,Linux下访问文件的基本模式
访问文件的操作主要是指读文件和写文件,下文简单说明内核中几种常见的访问文件的方式. 普通模式 读写系统调用的默认方式.以读系统调用为例,默认情况下读函数以阻塞的形式访问数据,并且使用了内核的页高速缓存 ...
- 【Android】【机型适配】解决Android10有文件权限但无法访问文件的问题
Android10对权限的管理更加严格了,主要有以下两点 权限按单个分配,不再按组分配,以前申请了读存储卡权限,即可获得同组的写权限,现在需要逐个申请 存储卡读写权限需要在Application的Ma ...
- Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数 linecache模块...
Python第五天 文件访问 for循环访问文件 while循环访问文件 字符串的startswith函数和split函数 linecache模块 目录 Pycharm使用技巧( ...
- vba中dir用法_利用Dir函数遍历某文件夹下的所有文件 | VBA实例教程
今天介绍利用Excel VBA的Dir方法来遍历某文件夹下的所有excel文件.还是直接来看例子,假设在D盘有一个叫工作日志的文件夹,里面放着每日的工作记录,都是excel 2007表格,现在由于工作 ...
- oracle参数文件initorcl位置,oracle 参数文件详解
参数文件 两类参数文件: pfile:文本文件的参数文件,可以使用vi,vim等编辑器修改,文件名通常为init.ora spfile:二进制的参数文件,不能直接修改,只能存放在Oracle服务器端, ...
- sharepoint文件夹本地同步_mac文件同步软件-Resilio Sync Home
Resilio Sync Mac版是Mac平台上的一款文件同步软件,Resilio Sync Mac版使用起来非常的简单.方便.你可以通过链接.秘钥或二维码的方式共享你电脑里的任意文件夹,接收方也可以 ...
- Fortran笔记,文件,part1-文件读取的概念、基本操作
参考资料:彭国论,<Fortran 95程序设计>,2002年 第9章 1. 文件读取的概念 读取文件:顺序读取 vs 直接读取 顺序:从头到尾读取 直接:跳到指定行列读取 保存文件:文本 ...
- ROS学习笔记-roslaunch文件的编写用sh脚本控制launch文件启动顺序
转载自:https://mp.weixin.qq.com/s?__biz=MzUyMTkxODQyOQ==&mid=2247484719&idx=1&sn=27b3a01c29 ...
最新文章
- Spring常用注解总结
- mysql 1261 load data_mysql使用load data导入数据文件
- 学python有前途吗-三十岁了,从零开始学python还有前途吗?
- fiddler4安装教程以及手机下载证书时报错 no root certificate was found解决方法
- 欧姆龙 Cx-one卸载软件
- HKC PG27P3评测 HKC PG27P3怎么样
- 深夜的呼唤,无尽的力量
- kubernetes: CNI解读
- Frida-dexdump使用,frida环境配置
- 数据库审计方案简介和功能对比
- echarts地图下钻与回钻
- python程序段的基本结构_python3 第三章 - 程序的基本结构
- Pagination 分页实现跳转首页和尾页
- 安心做技术研究的技术的少,为了名气,改写文章如此泛滥!
- 单元测试断言库:chai.js中文文档
- 结构体中的函数指针(c语言里一种思想)
- 集成电路——概念、发展分类和IC卡
- 显示器连接服务器老一闪一闪,显示器黑屏一闪一闪的怎么回事_显示器黑屏一闪一闪的解决方法...
- 【150】设计测试用例:假设京东有一个web API:输入打折价p1和原价p0,返回折扣信息0.9,请设计测试用例进行测试
- 阿里云RPA机器人流程自动化快速入门