fortran 90 文件(文件的操作语句)_第1页
fortran 90 文件(文件的操作语句)_第2页
fortran 90 文件(文件的操作语句)_第3页
fortran 90 文件(文件的操作语句)_第4页
fortran 90 文件(文件的操作语句)_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、土木学院土木学院1第 十 三 章 文文 件件(FORTRANFORTRAN的文件操作)的文件操作)土木学院土木学院2说明:说明: 在实际应用中,往往大量需要处理的数据是由专在实际应用中,往往大量需要处理的数据是由专门人员来采集门人员来采集,并构成以文件名来具体代表的数据并构成以文件名来具体代表的数据文件(文件(比如大型有限元软件的数据采集也是这样的)比如大型有限元软件的数据采集也是这样的); 文件名通常由三部分组成:文件名通常由三部分组成:存放的设备存放的设备、文件名本身文件名本身、文件类别文件类别; 如何从各种设备上获取和保存不同类型的数据文如何从各种设备上获取和保存不同类型的数据文件就是我

2、们在进行科学计算时常常遇到的问题;件就是我们在进行科学计算时常常遇到的问题; 我们现在主要以磁盘设备为例来介绍我们现在主要以磁盘设备为例来介绍FORTRAN对文件操作的语句对文件操作的语句(打开、关闭、定位、输入和输出打开、关闭、定位、输入和输出)土木学院土木学院3 FORTRAN的数据文件由记录组成,也就是对文的数据文件由记录组成,也就是对文件的存取是以件的存取是以记录记录为单位进行的;为单位进行的; 记录:长度不超过规定范围的数字或文本记录:长度不超过规定范围的数字或文本的集合的集合; Fortran的的数据文件按存取方式可划分为:数据文件按存取方式可划分为:1. 顺序存取文件(顺序文件)

3、顺序存取文件(顺序文件) 其存取操作必须从头到尾顺序进行;其存取操作必须从头到尾顺序进行;2. 直接存取文件(直接文件或随机文件)直接存取文件(直接文件或随机文件) 在程序的执行过程中对任意一个指定的在程序的执行过程中对任意一个指定的 记录进行操作记录进行操作(读和写读和写)。记记 录录文文 件件土木学院土木学院4 FORTRAN中中数据文件的存储形式数据文件的存储形式:1. 字符形式字符形式(ASCII) 称之为称之为“有格式存放有格式存放” FORMATTED2. 二进制数代码形式二进制数代码形式 称之为称之为“无格式存放无格式存放” UNFORMATTED土木学院土木学院5本章主要内容:

4、本章主要内容: 有格式顺序存取文件;有格式顺序存取文件; 有格式直接存取文件;有格式直接存取文件; 无格式文件的存取;无格式文件的存取; 文件操作语句;文件操作语句; 有关文件操作的程序举例。有关文件操作的程序举例。土木学院土木学院613.1有格式顺序存取文件有格式顺序存取文件 我们已经知道:我们已经知道:READ语句是完成数据输入语句是完成数据输入任务的。任务的。 从键盘输入一行数据(以从键盘输入一行数据(以Enter键作为确键作为确认),这就形成了一个认),这就形成了一个“记录记录”。 从键盘输入一行数据时,必须与指定的格从键盘输入一行数据时,必须与指定的格式对应(式对应(格式编辑符与输入

5、的数据类型以格式编辑符与输入的数据类型以及宽度及宽度),否则就会出错),否则就会出错(或报错或报错)。土木学院土木学院713.1有格式顺序存取文件有格式顺序存取文件 Read(* *,100) A,B C=A+B Write(* *,200) A= ,A, B= ,B Write(* *,200) C= ,C100 Format(2F6.1)200 Format(1X,2(A,F7.2) End输入:输入:_10.1_20.4输出:输出:A=_10.10_B=_20.40C=_30.50从键盘接收从键盘接收数据,经过数据,经过处理,然后处理,然后输出显示输出显示土木学院土木学院8 Read(*

6、,100) A,B C=A+B Write(*,200) A= ,A, B= ,B Write(*,200) C= ,C 100Format(2F6.1) 200Format(1X,2(A,F7.2) End土木学院土木学院9土木学院土木学院1013.1有格式顺序存取文件有格式顺序存取文件 下面我们就介绍如何从文件中获得数据:下面我们就介绍如何从文件中获得数据:(例如例如:从文件从文件F1.DAT中读取数据中读取数据,经过处理经过处理后后,将结果保存在将结果保存在F2.DAT中中)1. 准备数据文件准备数据文件(可以在各种编辑器中完成可以在各种编辑器中完成,输入格式及宽度与程序要求的一致输入格

7、式及宽度与程序要求的一致),数据文数据文件名的后缀为件名的后缀为 * *.DAT(也可以是也可以是*.txt);2. 编写数据输入和数据处理文件编写数据输入和数据处理文件,最后将结最后将结果输出到果输出到F2.DAT中中.土木学院土木学院11土木学院土木学院12character*8 Fname1Integer U1U1=3Fname1=F1.DATOpen(Unit=U1,File=Fname1,Status=OLD, $ Access=Sequential,Form=Formatted)Read(U1,100) A,BC=A+BOpen(Unit=2,File=F2.DAT,Status=

8、New, $ Access=Sequential,Form=Formatted)Write(2,200) A=,A, B=, BWrite(2,200) C=,CClose (U1)Close(2) 100Format(2F6.1) 200Format(2(A,F7.2)End _123.1_123.2 F1.DAT的内容A=_123.10 B=_123.20C=_246.30 F2.DAT的内容数据数据输出输出数据输数据输入和数入和数据处理据处理注:注:该源文件与数据文件放在同一目录中该源文件与数据文件放在同一目录中土木学院土木学院13这是已被打开这是已被打开的数据文件的的数据文件的内容内容

9、土木学院土木学院14土木学院土木学院15 U1=2Open(Unit=2,File=F2.DAT,Status=New, $ Access=Sequential,Form=Formatted) do 10 I=1,30 write(*,*) 请输入学号、两门成绩请输入学号、两门成绩 Read(*,*) N,A,B C=A+B Write(2,202) 学号:学号:, N,总成绩总成绩,C 10 continue Close(2) 100 Format(I2,F5.1,F5.1) 202 Format(A,I2,A,F7.1) End 输入输入30个学生的学号个学生的学号和两门成绩和两门成绩,最

10、后将总最后将总成绩与学号输出来成绩与学号输出来.土木学院土木学院16这是打开数据这是打开数据文件文件F2.DAT的内容的内容土木学院土木学院1713.1有格式顺序存取文件有格式顺序存取文件 打开文件打开文件(Open):是把一个设备号和一个文件名关是把一个设备号和一个文件名关联起来联起来,这样在程序中将由设备号代替指定的文件这样在程序中将由设备号代替指定的文件;Unit=ie 代表代表设备号设备号(099)File=ce 代表文件名代表文件名;Status=se 代表文件状态代表文件状态:已经存在已经存在-Old; 新建新建-NewAccess=SD 代表文件的存取方式:代表文件的存取方式:D

11、irect:以直接方式存取以直接方式存取;Sequential: 以顺序方式存取以顺序方式存取;Form=fe 代表文件存放格式代表文件存放格式:Formatted-字符形式字符形式 在在Open中省略中省略Access和和Form,则表示打开文件为则表示打开文件为有格式顺序存取文件有格式顺序存取文件. Open(Unit=2,File=F2.DAT,Status=New, Access=Sequential,Form=Formatted)土木学院土木学院1813.1有格式顺序存取文件有格式顺序存取文件 关闭文件关闭文件(Close):解除设备号和一个文件名的关解除设备号和一个文件名的关联联.

12、 CLOSE (设备号设备号) 一次只关闭一个设备号一次只关闭一个设备号;在程序中的在程序中的STOPEND语句都具有语句都具有Close的功能的功能 顺序文件的输入操作顺序文件的输入操作:READ(设备号设备号,格式说明格式说明,END=语句标号语句标号) 变量表变量表 顺序文件的输出操作顺序文件的输出操作: Write(设备号设备号,格式说明格式说明) 输出项表输出项表与与OPEN中中指定的设备指定的设备号相同号相同一般不写一般不写土木学院土木学院19举例:读出一个数据文件记录举例:读出一个数据文件记录,并把它显示在屏幕上并把它显示在屏幕上 Open (Unit=2,File=TAB.DA

13、T,Status=NEW $ Access=Sequential ,Form=Formatted) Do 10 X=1,10 Write(2,100) X, X* *X, X* *X* *X10 Continue Rewind(2) Write(* *, ,* *) X X* *X X* *X* *X20 Read(2,100, End=30) A,B,C Write(* *,200) A,B,C Goto 2030 Close(2)100 Format(3F7.1)200 Format(1X,3F9.2) End将文件指针重新设置在文件开头(与设备号将文件指针重新设置在文件开头(与设备号2连

14、接的文件的开头)连接的文件的开头)End=30表示一旦读到文件结束标志就不再进行读操作而转到标号为30的语句继续执行。土木学院土木学院20土木学院土木学院21这是打开数据这是打开数据文件文件TAB.DAT的内容的内容土木学院土木学院22 Integer N(30) Real A(30), B(30), C(30) Write(* *, ,* *) ) “请从键盘上输入学号、两门成绩请从键盘上输入学号、两门成绩 Do 300 i=1,30 Read(* *, ,101) N(I), A(I), B(I) 300 Continue Write(* *, ,* *) N,A,B U1=2 Open(

15、Unit=2,File=F2.DAT,Status=New, $ Access=Sequential,Form=Formatted) Do 10 I=1,30 C(I)=A(I)+B(I) write(2,150) N(I),c(I) 10 continue close(2) 101 format(I3,F5.1,F5.1) 150 format(I2,3x,F5.1) End 使用数组使用数组: :输入输入3030个学生的学号和两个学生的学号和两门成绩门成绩, ,最后将总最后将总成绩与学号输出来成绩与学号输出来. .土木学院土木学院23土木学院土木学院2413.1有格式顺序存取文件有格式顺序

16、存取文件 -顺序文件输入输出的基本规则顺序文件输入输出的基本规则 Read语句中各输入项在类型上、格式说明上必须语句中各输入项在类型上、格式说明上必须与输出语句的输出项按位置一一对应;与输出语句的输出项按位置一一对应; Open或或Rewind是从文件的第一个记录开始输入,是从文件的第一个记录开始输入,每执行一次每执行一次Read语句,总是从一个新的记录开始语句,总是从一个新的记录开始读入;读入; 在在Read语句读文件记录时,输入项少于记录中的语句读文件记录时,输入项少于记录中的数据项,则剩余数据被忽略输入项多于记录中数据项,则剩余数据被忽略输入项多于记录中的数据项,它将接着去读下一个记录的

17、数据项,它将接着去读下一个记录,直到所有项直到所有项都获得数据或者遇上文件结束标志为止;都获得数据或者遇上文件结束标志为止; 在程序设计中对一个顺序文件不可能做到在程序设计中对一个顺序文件不可能做到“重写重写前半部分而保留后半部分前半部分而保留后半部分”这样的操作。这样的操作。土木学院土木学院2513.1有格式顺序存取文件有格式顺序存取文件 -顺序文件输入输出的基本规则顺序文件输入输出的基本规则 一个一个WRITE语句总是开始一个新的记录;语句总是开始一个新的记录; 一般来说,对同一个文件在进行写操作之一般来说,对同一个文件在进行写操作之后要进行读操作时,必须先使用文件定位后要进行读操作时,必

18、须先使用文件定位语句,重新设置指针位置语句,重新设置指针位置 (Open语句、语句、 Rewind语句以及语句以及Backspace语句等);语句等); 也可以使用也可以使用表控输入输出语句表控输入输出语句对文件进行对文件进行格式输入输出,如:格式输入输出,如:WRITE(3,* *) N,M。Next土木学院土木学院2613.2 有格式直接存取文件有格式直接存取文件 直接存取可以直接存取可以任意确定任意确定需要读写记录的位需要读写记录的位置置; 直接存取只适用于直接存取只适用于磁盘文件磁盘文件; 其基本的操作与顺序存取大致相同其基本的操作与顺序存取大致相同,主要不主要不同的是同的是:Open

19、的说明、的说明、Read和和Write的控制的控制项不同。项不同。 下面以例说明下面以例说明土木学院土木学院2713.2有格式直接存取文件有格式直接存取文件主要语句主要语句: Open(12,File=Datb.Dat,Status=New,Access=Direct,Form=Formatted,Recl=16 ?)记录的长度,以字节为单位。记录的长度,以字节为单位。在直接存取文件中每个记录在直接存取文件中每个记录的长度是相等的,但真正写的长度是相等的,但真正写到文件中的实际字节的个数到文件中的实际字节的个数可以比说明的长度短。可以比说明的长度短。下面举例:下面举例:1 1)建立一个直接存取

20、文件;)建立一个直接存取文件;2 2)根据用户输入记录号,输)根据用户输入记录号,输 出该记录。出该记录。土木学院土木学院28 Parameter(N=10) Open(12,File=Datb.Dat,Status=New,$ Access=Direct,Form=Formatted,Recl=16 ) Do 10 I=1,N Write(12,100,Rec=I) I,Sqrt(Real(I) Continue Format(I3, E13.6) Close (12) Open(10,File=Datb.Dat,Status=old,$ Access=Direct,Form=Formatt

21、ed,Recl=16 ) Call Fromkey(k) Do 20 While(k .GE. 0) IF (k .LE.N .AND. K .GE. 1) THEN Read(10,100,Rec=K) IS, S Write(* *,200) IS,S ELSE Write(* *, ,* *) Input Error! Endif Call Fromkey(K) Continue Close (10)200 Format(1x,Sqrt of ,I2,IS:,F10.6) End Subroutine Fromkey(K) Write(*,*) Enter 0 to end: Write

22、(*,*) Enter a Number Read(*,*) K End1-10的开方值的开方值读出该记录后再用读出该记录后再用Write语句输出到屏语句输出到屏幕上幕上记录的长度,以字节为单位。记录的长度,以字节为单位。在直接存取文件中每个记录的在直接存取文件中每个记录的长度是相等的,但真正写到文长度是相等的,但真正写到文件中的实际字节的个数可以比件中的实际字节的个数可以比说明的长度短。说明的长度短。记录号:是不可少的参记录号:是不可少的参数,文件的第一个记录数,文件的第一个记录的记录号为的记录号为1土木学院土木学院29 Parameter(N=10)Open(12,File=Datb.Da

23、t,Status=New,Access=Direct,Form=Formatted,Recl=16 )Do 10 I=1,NWrite(12,100,Rec=I) I,Sqrt(Real(I) 10 Continue 100 Format(I3, E13.6) Close (12)Open(10,File=Datb.Dat,Status=old,Access=Direct,Form=Formatted,Recl=16 )Call Fromkey(k)Do 20 While(k .GE. 0)IF (k .LE.N .AND. K .GE. 1) THENRead(10,100,Rec=K) I

24、S, SWrite(*,200) IS,SELSEWrite(*,*) Input Error!EndifCall Fromkey(K)20 Continue Close (10)200 Format(1x,Sqrt of ,I2,IS:,F10.6) EndSubroutine Fromkey(K)Write(*,*) Enter 0 to end:Write(*,*) Enter a NumberRead(*,*) KEnd3位加位加13位为位为16位如果位如果Recl=13则则OverFlow土木学院土木学院30土木学院土木学院31这是打开数据文这是打开数据文件件Datb.DAT的的内容

25、内容土木学院土木学院3213.2有格式直接存取文件有格式直接存取文件 记录长度说明记录长度说明RECL=ie:该整形数表达式的该整形数表达式的值指定记录的长度值指定记录的长度,以字节为单位。在直,以字节为单位。在直接存取文件中每个记录的长度是相等的,接存取文件中每个记录的长度是相等的,但真正写到文件中的实际字节的个数可以但真正写到文件中的实际字节的个数可以比说明的长度短(不能超过说明长度)。比说明的长度短(不能超过说明长度)。 输入和输出语句中的输入和输出语句中的REC=记录号:是不可记录号:是不可少的参数,文件的第一个记录的记录号为少的参数,文件的第一个记录的记录号为1。在执行在执行Read

26、语句时,按格式读入的记录长语句时,按格式读入的记录长度必须小于或等于度必须小于或等于Open语句中说明的记录语句中说明的记录长度。长度。土木学院土木学院3313.2有格式直接存取文件有格式直接存取文件-直接存取文件输入输出的基本规则直接存取文件输入输出的基本规则 直接存取文件中每个记录的长度必须相等,直接存取文件中每个记录的长度必须相等,如果如果实际输出的记录长度不等,在操作时选取最大的实际输出的记录长度不等,在操作时选取最大的记录长度作为文件每个记录的长度记录长度作为文件每个记录的长度;记录长度由;记录长度由相应的相应的Format格式规定的输出所占域宽来决定格式规定的输出所占域宽来决定;

27、如果是原来已经存在的(如果是原来已经存在的(Old)数据文件,在)数据文件,在Open语句中说明的记录长度必须应与实际的记录语句中说明的记录长度必须应与实际的记录长度一致。长度一致。 用直接方式建立的文件可以采用顺序方式打开并用直接方式建立的文件可以采用顺序方式打开并进行读操作;用顺序方式建立的文件(在记录长进行读操作;用顺序方式建立的文件(在记录长度相等时),直接方式也可打开并进行读操作。度相等时),直接方式也可打开并进行读操作。Next土木学院土木学院3413.3无无格式格式文件的存取文件的存取 在实际应用中,往往是有大量的数据是作为中间在实际应用中,往往是有大量的数据是作为中间结果保存下

28、来(不是为了人们阅读,而是用于计结果保存下来(不是为了人们阅读,而是用于计算机继续处理,而且只能保存在磁盘或磁带上)。算机继续处理,而且只能保存在磁盘或磁带上)。这种数据是以这种数据是以二进制二进制数据格式存放的,需要时无数据格式存放的,需要时无需转换就能直接使用;需转换就能直接使用; 无格式文件的存放也是分为按顺序方式和直接方无格式文件的存放也是分为按顺序方式和直接方式两种,在式两种,在Open语句中的语句中的Form是:是: Form=unformatted土木学院土木学院3513.3无格式文件的存取无格式文件的存取 在进行无格式输入输出时,操作与上基本相同,在进行无格式输入输出时,操作与

29、上基本相同,但语句中但语句中没有格式说明没有格式说明这一项,如:这一项,如: Write(10) I,J Write(2,REC=K) I,J Read(10,END=100) 无格式文件只能进行无格式读或写,每执行一次无格式文件只能进行无格式读或写,每执行一次输出、输入语句就输出或读入一个记录。输出、输入语句就输出或读入一个记录。 读文件的时候,输入项表中各项的类型必须与写读文件的时候,输入项表中各项的类型必须与写记录时输出项表中各项的类型一一对应。记录时输出项表中各项的类型一一对应。Next土木学院土木学院3613.4 文件操作语句文件操作语句Open (说明项说明项);Close (说明

30、项说明项);Rewind (说明项说明项);Backspace (说明项说明项);它使指定设备号的文件指针回退一个记录位置,通常它使指定设备号的文件指针回退一个记录位置,通常用在顺序文件存取中用在顺序文件存取中Read (说明项说明项) 输入项表输入项表;Write (说明项说明项) 输入项表输入项表;Next土木学院土木学院3713.5 程序举例程序举例 integer a,b data a,b/2,3/ Open (Unit=2,File=T2a.DAT,Status=NEW,& &Access=Sequential ,Form=unFormatted) write(2) a,b close(2) end土木学院土木学院3813.5 程序举例程序举例土木学院土木学院3913.5 程序举例程序举例 Open (Unit=2,File=TAB.DAT,Status=NEW, $ Access=Sequential ,Form=unFormatted) Do 10 X=1,10 Write(2) X, X* *X, X* *X* *X 10 Continue Rewind(2) Write( (* *, ,* *) ) X X* *X X* *X* *X 20 Read(2,End=30) A,B,C Write( (* *

温馨提示

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

评论

0/150

提交评论