Fortran程序设计:第八课 文件初步_第1页
Fortran程序设计:第八课 文件初步_第2页
Fortran程序设计:第八课 文件初步_第3页
Fortran程序设计:第八课 文件初步_第4页
Fortran程序设计:第八课 文件初步_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Fortran程序设计 第八课第八课 文件初步文件初步 8.1 文件初步文件初步 截止目前,我们接触到的程序都是小规模的截止目前,我们接触到的程序都是小规模的 但是,在具体应用中,输入的数据和输出的数据量但是,在具体应用中,输入的数据和输出的数据量 都非常的大都非常的大 我们不可能从键盘上一个个地键入大量的输入数据,我们不可能从键盘上一个个地键入大量的输入数据, 或者对着屏幕一条条分析输出结果或者对着屏幕一条条分析输出结果 解决这个问题的办法是用文件:解决这个问题的办法是用文件: n文件是一种保存数据的标准结构,它由许多相互文件是一种保存数据的标准结构,它由许多相互 关联的数据行组成,可以作为

2、一个整体被存取。关联的数据行组成,可以作为一个整体被存取。 文件中的每个信息行称为记录。文件中的每个信息行称为记录。 nFortran可以一次一个记录地从一个文件中读取信可以一次一个记录地从一个文件中读取信 息或者向文件中写入信息。息或者向文件中写入信息。 在在Fortran中读写文件的方法:中读写文件的方法: 输入输入/输出单元(输出单元(I/O单元,单元)单元,单元) nI/O单元与单元与READ(*,*)和和WRITE(*,*)语句中的第一语句中的第一 个星号对应个星号对应 n如果这个星号被如果这个星号被I/O单元代号代替,那么相应的读单元代号代替,那么相应的读 写设备将由该单元指定,替

3、代标准写设备将由该单元指定,替代标准I/O设备设备 n除此之外,其它格式与之前所学没有区别除此之外,其它格式与之前所学没有区别 文件操作相关语句文件操作相关语句 OPEN CLOSE READ WRITE REWIND BACKSPACE 8.1.1 OPEN语句语句 OPEN语句将一个文件和一个给定的语句将一个文件和一个给定的I/O单元号关联单元号关联 OPEN(open_list) open_list包含一组子句,分别指定包含一组子句,分别指定I/O单元号、文件单元号、文件 名和关于如何存取文件的信息名和关于如何存取文件的信息 暂时只介绍最重要的六项:暂时只介绍最重要的六项: UNIT F

4、ILE STATUS ACTION IOSTAT 1)UNIT=int_expr 2)FILE=char_expr char_expr是一个包含要打开文件的名称的字符值是一个包含要打开文件的名称的字符值 3)STATUS=char_expr char_expr指定要打开文件的状态,可以取:指定要打开文件的状态,可以取: OLD,NEW,REPLACE,SCRATCH,UNKNOW 4)ACTION=char_expr 指定文件以只读、只写或读写方式打开,可取:指定文件以只读、只写或读写方式打开,可取: READ,WRITE,READWRITE,如果没有指定,文件如果没有指定,文件 以读写方式打

5、开以读写方式打开 5)IOSTAT=int_var OPEN语句如果成功执行,会给语句如果成功执行,会给int_var赋值赋值0,如果不,如果不 成功,相应错误的整数代码会赋值给成功,相应错误的整数代码会赋值给int_var 例:例: 打开一个文件打开一个文件input.dat,并将其连接到,并将其连接到I/O单元单元8 INTEGER : ierror OPEN (UNIT=8,FILE=input.dat,STATUS=OLD& &,ACTION=READ,IOSTAT=ierror) 例:例: 打开一个文件打开一个文件output.dat,并将其连接到,并将其连接到I/O单元单元18 I

6、NTEGER : ierror OPEN (UNIT=18,FILE=output.dat,STATUS=& &NEW,ACTION=WRITE,IOSTAT=ierror) nSTATUS=NEW子句指明文件是新文件,如果文子句指明文件是新文件,如果文 件已经存在,那么件已经存在,那么OPEN语句就给变量语句就给变量ierror返回返回 一个错误代码,确保不会覆盖掉已有的文件一个错误代码,确保不会覆盖掉已有的文件 n如果用如果用STATUS=REPLACE,情况就不一样情况就不一样 例例 打开一个临时文件打开一个临时文件 OPEN (UNIT=12,STATUS=SCRATCH,& &IOS

7、TAT=ierror) n临时文件由程序建立,当文件被关闭或程序终止临时文件由程序建立,当文件被关闭或程序终止 运行时,它将被自动删除。运行时,它将被自动删除。 n这类文件可在程序运行时保存中间结果,注意程这类文件可在程序运行时保存中间结果,注意程 序结束后,就不再可用了。序结束后,就不再可用了。 8.1.2 CLOSE语句语句 CLOSE语句关闭一个文件并释放与之关联的单元号语句关闭一个文件并释放与之关联的单元号 CLOSE(close_list) nclose_list也是一个子句序列,这里我们暂时只掌也是一个子句序列,这里我们暂时只掌 握不可少的子句:指定握不可少的子句:指定I/O号号

8、n在关闭一个非临时文件后,随时还可以用在关闭一个非临时文件后,随时还可以用OPEN 再次打开再次打开 n再次打开可以分配与上次一样或不一样的单元号再次打开可以分配与上次一样或不一样的单元号 nCLOSE释放出来的单元号可以分配给其它文件释放出来的单元号可以分配给其它文件 nCLOSE(UNIT=12) 8.1.3 磁盘文件的读写磁盘文件的读写 以自由格式从文件以自由格式从文件input.dat中读取变量中读取变量x,y,z OPEN (UNIT=8,FILE=input.dat,STATUS=& &OLD,IOSTAT=ierror) READ (8,*) x,y,z 以特定格式向文件以特定格

9、式向文件output.dat写入变量写入变量x,y,z的值的值 OPEN (UNIT=9,FILE=output.dat,STATUS=& &REPLACE,IOSTAT=ierroe) WRITE (9,100) x,y,z 100 FORMAT (x =,F10.2, y = ,F10.2,z=,F10.2) 8.1.4 READ语句中的语句中的IOSTAT 如果如果READ语句执行失败,程序会异常中断。语句执行失败,程序会异常中断。 为了让程序更为友好以及便于调试,在为了让程序更为友好以及便于调试,在READ语句语句 中可以增加中可以增加IOSTAT子句。子句。 形式为:形式为: REA

10、D (unit,FORMAT,IOSTAT=int_var) int_var这个整型变量会返回这个整型变量会返回READ执行的状态执行的状态 n如果如果READ成功执行,值为成功执行,值为0 n如果文件或格式错误,值为非如果文件或格式错误,值为非0正数(错误代码)正数(错误代码) n如果因到达输入文件尾部而导致失败,值为负数。如果因到达输入文件尾部而导致失败,值为负数。 应用举例应用举例:example1.f90 PROGRAM read_file IMPLICIT NONE CHARACTER(len=20) : filename INTEGER : nvals = 0 INTEGER :

11、status REAL : value WRITE (*,*) Please enter input file name: READ (*,*) filename WRITE (*,1000) filename 1000 FORMAT ( ,The input filename is :,A) OPEN (UNIT=3,FILE=filename,STATUS=OLD,ACTION=REA D,IOSTAT=status) openif: IF (status = 0) THEN readloop: DO READ (3,*,IOSTAT=status) value IF (status/=0

12、) EXIT nvals = nvals+1 WRITE (*,1010) nvals,value 1010 FORMAT ( ,Line ,I6,:Value = ,F10.4) END DO readloop readif: IF (status0) THEN WRITE (*,1020) nvals+1 1020 FORMAT ( ,An error occurred reading line ,I6) ELSE WRITE (*,1030) nvals 1030 FORMAT ( ,End of file reached. There were ,I6,values int the f

13、ile) END IF readif ELSE openif WRITE (*,1040) status 1040 FORMAT ( ,Error opening file:IOSTAT = ,I6) END IF openif CLOSE (UNIT =3 ) END PROGRAM read_file 8.1.5 文件定位文件定位 普通的普通的Fortran文件是顺序文件文件是顺序文件-读取顺序是从文读取顺序是从文 件中的第一个记录开始到文件中的最后一个记录件中的第一个记录开始到文件中的最后一个记录 如何在文件内部定位读取?如何在文件内部定位读取? BACKSPACE (UNIT=unit

14、) 回退一条记录回退一条记录 REWIND (UNIT=unit) 从文件头重新开始文件从文件头重新开始文件 两个语句也可以加两个语句也可以加IOSTAT,检查错误,防止异常,检查错误,防止异常 终止终止 例例:example2.f90 PROGRAM scratch_file IMPLICIT NONE INTEGER,PARAMETER : LU = 8 REAL : data INTEGER : icount = 0 INTEGER : irec INTEGER : j OPEN (UNIT=LU, STATUS=SCRATCH) WRITE (*,100) 100 FORMAT (1X,Enter positive or zero input values.,/,& &1X,A negative value terminates input.) DO WRITE (*,110) icount+1 110 FORMAT (1X,Enter sample ,I4,:) READ (*,*) data IF (data=1) .AND. (irec=icount) THEN REWIND (UNIT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论