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

下载本文档

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

文档简介

第十三章

文件(FORTRAN的文件操作)1土木学院说明:在实际应用中,往往大量需要处理的数据是由专门人员来采集,并构成以文件名来具体代表的数据文件(比如大型有限元软件的数据采集也是这样的);文件名通常由三部分组成:存放的设备、文件名本身、文件类别;如何从各种设备上获取和保存不同类型的数据文件就是我们在进行科学计算时常常遇到的问题;我们现在主要以磁盘设备为例来介绍FORTRAN对文件操作的语句(打开、关闭、定位、输入和输出)2土木学院FORTRAN的数据文件由记录组成,也就是对文件的存取是以记录为单位进行的;记录:长度不超过规定范围的数字或文本的集合;Fortran的数据文件按存取方式可划分为:

1.顺序存取文件(顺序文件)

其存取操作必须从头到尾顺序进行;

2.直接存取文件(直接文件或随机文件)

在程序的执行过程中对任意一个指定的

记录进行操作(读和写)。记录文件3土木学院FORTRAN中数据文件的存储形式:

1.字符形式(ASCII)

——称之为“有格式存放”

FORMATTED

2.二进制数代码形式

——称之为“无格式存放”

UNFORMATTED4土木学院本章主要内容:有格式顺序存取文件;有格式直接存取文件;无格式文件的存取;文件操作语句;有关文件操作的程序举例。5土木学院13.1有格式顺序存取文件我们已经知道:READ语句是完成数据输入任务的。从键盘输入一行数据(以Enter键作为确认),这就形成了一个“记录”。从键盘输入一行数据时,必须与指定的格式对应(格式编辑符与输入的数据类型以及宽度),否则就会出错(或报错)。6土木学院13.1有格式顺序存取文件Read(*,100)A,B

C=A+B

Write(*,200)‘A=‘,A,‘B=‘,B

Write(*,200)‘C=‘,C100Format(2F6.1)200Format(1X,2(A,F7.2))

End输入:

__10.1__20.4输出:

A=__10.10_B=__20.40

C=__30.50从键盘接收数据,经过处理,然后输出显示.7土木学院Read(*,100)A,BC=A+BWrite(*,200)'A=',A,'B=',BWrite(*,200)'C=',C100Format(2F6.1)200Format(1X,2(A,F7.2))End8土木学院9土木学院13.1有格式顺序存取文件下面我们就介绍如何从文件中获得数据:

(例如:从文件F1.DAT中读取数据,经过处理后,将结果保存在F2.DAT中)

1.准备数据文件(可以在各种编辑器中完成,输入格式及宽度与程序要求的一致),数据文件名的后缀为*.DAT(也可以是*.txt);

2.编写数据输入和数据处理文件,最后将结果输出到F2.DAT中.10土木学院11土木学院

character*8Fname1 IntegerU1 U1=3 Fname1='F1.DAT'

Open(Unit=U1,File=Fname1,Status='OLD',

$Access='Sequential',Form='Formatted') Read(U1,100)A,B C=A+B

Open(Unit=2,File='F2.DAT',Status='New',

$Access='Sequential',Form='Formatted') Write(2,200)'A=',A,'B=',B Write(2,200)'C=',C Close(U1) Close(2)100 Format(2F6.1)200 Format(2(A,F7.2)) End_123.1_123.2F1.DAT的内容A=_123.10B=_123.20

C=_246.30F2.DAT的内容数据输出数据输入和数据处理注:该源文件与数据文件放在同一目录中12土木学院这是已被打开的数据文件的内容13土木学院14土木学院 U1=2

Open(Unit=2,File='F2.DAT',Status='New',$Access='Sequential',Form='Formatted')do10I=1,30 write(*,*)"请输入学号、两门成绩" Read(*,*)N,A,B C=A+BWrite(2,202)'学号:',N,'总成绩',C10 continue Close(2)100Format(I2,F5.1,F5.1)202Format(A,I2,A,F7.1)End

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

Direct:以直接方式存取;Sequential:以顺序方式存取;Form=fe代表文件存放格式:Formatted-字符形式在Open中省略Access和Form,则表示打开文件为有格式顺序存取文件.

Open(Unit=2,File='F2.DAT',Status='New',Access='Sequential',Form='Formatted')17土木学院13.1有格式顺序存取文件关闭文件(Close):解除设备号和一个文件名的关联.CLOSE(设备号)一次只关闭一个设备号;

在程序中的STOP\END语句都具有Close的功能顺序文件的输入操作:

READ(设备号,格式说明,END=语句标号)变量表顺序文件的输出操作:

Write(设备号,格式说明)输出项表与OPEN中指定的设备号相同一般不写18土木学院举例:读出一个数据文件记录,并把它显示在屏幕上

Open(Unit=2,File=‘TAB.DAT’,Status=‘NEW’

$Access=‘Sequential’,Form=‘Formatted’)

Do10X=1,10

Write(2,100)X,X*X,X*X*X

10Continue

Rewind(2)

Write(*,*)‘XX*XX*X*X’

20Read(2,100,End=30)A,B,C

Write(*,200)A,B,C

Goto20

30Close(2)

100Format(3F7.1)

200Format(1X,3F9.2)

End将文件指针重新设置在文件开头(与设备号2连接的文件的开头)End=30表示一旦读到文件结束标志就不再进行读操作而转到标号为30的语句继续执行。19土木学院20土木学院这是打开数据文件TAB.DAT的内容21土木学院 IntegerN(30) RealA(30),B(30),C(30) Write(*,*)“请从键盘上输入学号、两门成绩" Do300i=1,30 Read(*,101)N(I),A(I),B(I)300 Continue Write(*,*)N,A,B U1=2 Open(Unit=2,File='F2.DAT',Status='New',$Access='Sequential',Form='Formatted')Do10I=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

使用数组:输入30个学生的学号和两门成绩,最后将总成绩与学号输出来.22土木学院23土木学院13.1有格式顺序存取文件

--顺序文件输入输出的基本规则Read语句中各输入项在类型上、格式说明上必须与输出语句的输出项按位置一一对应;Open或Rewind是从文件的第一个记录开始输入,每执行一次Read语句,总是从一个新的记录开始读入;在Read语句读文件记录时,输入项少于记录中的数据项,则剩余数据被忽略.输入项多于记录中的数据项,它将接着去读下一个记录,直到所有项都获得数据或者遇上文件结束标志为止;在程序设计中对一个顺序文件不可能做到“重写前半部分而保留后半部分”这样的操作。24土木学院13.1有格式顺序存取文件

--顺序文件输入输出的基本规则一个WRITE语句总是开始一个新的记录;一般来说,对同一个文件在进行写操作之后要进行读操作时,必须先使用文件定位语句,重新设置指针位置(Open语句、Rewind语句以及Backspace语句等);也可以使用表控输入输出语句对文件进行格式输入输出,如:WRITE(3,*)N,M。Next25土木学院13.2有格式直接存取文件直接存取可以任意确定需要读写记录的位置;直接存取只适用于磁盘文件;其基本的操作与顺序存取大致相同,主要不同的是:Open的说明、Read和Write的控制项不同。 下面以例说明26土木学院13.2有格式直接存取文件主要语句:Open(12,File=‘Datb.Dat’,Status=‘New’,

Access=‘Direct’,Form=‘Formatted’,

Recl=16

?)记录的长度,以字节为单位。在直接存取文件中每个记录的长度是相等的,但真正写到文件中的实际字节的个数可以比说明的长度短。下面举例:

1)建立一个直接存取文件;

2)根据用户输入记录号,输

出该记录。27土木学院 Parameter(N=10)

Open(12,File=‘Datb.Dat’,Status=‘New’,

$Access=‘Direct’,Form=‘Formatted’,Recl=16)

Do10I=1,N

Write(12,100,Rec=I)I,Sqrt(Real(I))ContinueFormat(I3,E13.6)

Close(12)

Open(10,File=‘Datb.Dat’,Status=‘old’,

$Access=‘Direct’,Form=‘Formatted’,Recl=16)

CallFromkey(k)

Do20While(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(*,*)‘InputError!’

Endif

CallFromkey(K)Continue

Close(10)200Format(1x,Sqrtof‘,I2,’IS:’,F10.6)

End

SubroutineFromkey(K)

Write(*,*)‘Enter0toend:’

Write(*,*)‘EnteraNumber’

Read(*,*)K

End1-10的开方值读出该记录后再用

Write语句输出到屏幕上记录的长度,以字节为单位。在直接存取文件中每个记录的长度是相等的,但真正写到文件中的实际字节的个数可以比说明的长度短。记录号:是不可少的参数,文件的第一个记录的记录号为128土木学院 Parameter(N=10) Open(12,File='Datb.Dat',Status='New',Access='Direct',Form='Formatted',Recl=16) Do10I=1,N Write(12,100,Rec=I)I,Sqrt(Real(I))10Continue100Format(I3,E13.6) Close(12) Open(10,File='Datb.Dat',Status='old',Access='Direct',Form='Formatted',Recl=16) CallFromkey(k) Do20While(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(*,*)'InputError!' Endif CallFromkey(K)20ContinueClose(10)200Format(1x,'Sqrtof',I2,'IS:',F10.6)End SubroutineFromkey(K) Write(*,*)'Enter0toend:' Write(*,*)'EnteraNumber' Read(*,*)K End3位加13位为16位.如果Recl=13则OverFlow29土木学院30土木学院这是打开数据文件Datb.DAT的内容31土木学院13.2有格式直接存取文件记录长度说明RECL=ie:该整形数表达式的值指定记录的长度,以字节为单位。在直接存取文件中每个记录的长度是相等的,但真正写到文件中的实际字节的个数可以比说明的长度短(不能超过说明长度)。输入和输出语句中的REC=记录号:是不可少的参数,文件的第一个记录的记录号为1。在执行Read语句时,按格式读入的记录长度必须小于或等于Open语句中说明的记录长度。32土木学院13.2有格式直接存取文件

--直接存取文件输入输出的基本规则直接存取文件中每个记录的长度必须相等,如果实际输出的记录长度不等,在操作时选取最大的记录长度作为文件每个记录的长度;记录长度由相应的Format格式规定的输出所占域宽来决定;如果是原来已经存在的(Old)数据文件,在Open语句中说明的记录长度必须应与实际的记录长度一致。用直接方式建立的文件可以采用顺序方式打开并进行读操作;用顺序方式建立的文件(在记录长度相等时),直接方式也可打开并进行读操作。Next33土木学院13.3无格式文件的存取在实际应用中,往往是有大量的数据是作为中间结果保存下来(不是为了人们阅读,而是用于计算机继续处理,而且只能保存在磁盘或磁带上)。这种数据是以二进制数据格式存放的,需要时无需转换就能直接使用;无格式文件的存放也是分为按顺序方式和直接方式两种,在Open语句中的Form是:

Form=‘unformatted’34土木学院13.3无格式文件的存取在进行无格式输入输出时,操作与上基本相同,但语句中没有格式说明这一项,如:

Write(10)I,J

Write(2,REC=K)I,J

Read(10,END=100)无格式文件只能进行无格式读或写,每执行一次输出、输入语句就输出或读入一个记录。读文件的时候,输入项表中各项的类型必须与写记录时输出项表中各项的类型一一对应。Next35土木学院13.4文件操作语句Open(说明项);Close(说明项);Rewind(说明项);Backspace(说明项);

它使指定设备号的文件指针回退一个记录位置,通常用在顺序文件存取中.Read(说明项)[输入项表];Write(说明项)[输入项表];Next36土木学院13.5程序举例integera,bdataa,b/2,3/Open(Unit=2,File='T2a.DAT',Status='NEW',&&Access='Sequential',Form='unFormatted')write(2)a,bclose(2)end37土木学院13.5程序举例38土木学院13.5程序举例

Open(Unit=2,File='TAB.DAT',Status='NEW',$Access='Sequential',Form='unFormatted')Do10X=1,10 Write(2)X,X*X,X*X*X10ContinueRewind(2) Write(*,*)'XX*XX*X*X'20Read(2,End=30)A,B,CWrite(*,200)A,B,CGoto2030Close(2)200Format(1X,3F9.2)End39土木学院13.5程序举例40土木学院 parameter(nrec=100) integeru num=nrec u=10 open(u,file='r1004',status='new',form='unformatted') callgetfile(u,num) calldelodd(u) callprifile(u) close(u) endc以下是产生一个随机数程序

温馨提示

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

评论

0/150

提交评论