fortran90文件(文件的操作語(yǔ)句)_第1頁(yè)
fortran90文件(文件的操作語(yǔ)句)_第2頁(yè)
fortran90文件(文件的操作語(yǔ)句)_第3頁(yè)
fortran90文件(文件的操作語(yǔ)句)_第4頁(yè)
fortran90文件(文件的操作語(yǔ)句)_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第十三章

文件(FORTRAN的文件操作)1土木學(xué)院說(shuō)明:在實(shí)際應(yīng)用中,往往大量需要處理的數(shù)據(jù)是由專門人員來(lái)采集,并構(gòu)成以文件名來(lái)具體代表的數(shù)據(jù)文件(比如大型有限元軟件的數(shù)據(jù)采集也是這樣的);文件名通常由三部分組成:存放的設(shè)備、文件名本身、文件類別;如何從各種設(shè)備上獲取和保存不同類型的數(shù)據(jù)文件就是我們?cè)谶M(jìn)行科學(xué)計(jì)算時(shí)常常遇到的問(wèn)題;我們現(xiàn)在主要以磁盤設(shè)備為例來(lái)介紹FORTRAN對(duì)文件操作的語(yǔ)句(打開、關(guān)閉、定位、輸入和輸出)2土木學(xué)院FORTRAN的數(shù)據(jù)文件由記錄組成,也就是對(duì)文件的存取是以記錄為單位進(jìn)行的;記錄:長(zhǎng)度不超過(guò)規(guī)定范圍的數(shù)字或文本的集合;Fortran的數(shù)據(jù)文件按存取方式可劃分為:

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

其存取操作必須從頭到尾順序進(jìn)行;

2.直接存取文件(直接文件或隨機(jī)文件)

在程序的執(zhí)行過(guò)程中對(duì)任意一個(gè)指定的

記錄進(jìn)行操作(讀和寫)。記錄文件3土木學(xué)院FORTRAN中數(shù)據(jù)文件的存儲(chǔ)形式:

1.字符形式(ASCII)

——稱之為“有格式存放”

FORMATTED

2.二進(jìn)制數(shù)代碼形式

——稱之為“無(wú)格式存放”

UNFORMATTED4土木學(xué)院本章主要內(nèi)容:有格式順序存取文件;有格式直接存取文件;無(wú)格式文件的存??;文件操作語(yǔ)句;有關(guān)文件操作的程序舉例。5土木學(xué)院13.1有格式順序存取文件我們已經(jīng)知道:READ語(yǔ)句是完成數(shù)據(jù)輸入任務(wù)的。從鍵盤輸入一行數(shù)據(jù)(以Enter鍵作為確認(rèn)),這就形成了一個(gè)“記錄”。從鍵盤輸入一行數(shù)據(jù)時(shí),必須與指定的格式對(duì)應(yīng)(格式編輯符與輸入的數(shù)據(jù)類型以及寬度),否則就會(huì)出錯(cuò)(或報(bào)錯(cuò))。6土木學(xué)院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從鍵盤接收數(shù)據(jù),經(jīng)過(guò)處理,然后輸出顯示.7土木學(xué)院Read(*,100)A,BC=A+BWrite(*,200)'A=',A,'B=',BWrite(*,200)'C=',C100Format(2F6.1)200Format(1X,2(A,F7.2))End8土木學(xué)院9土木學(xué)院13.1有格式順序存取文件下面我們就介紹如何從文件中獲得數(shù)據(jù):

(例如:從文件F1.DAT中讀取數(shù)據(jù),經(jīng)過(guò)處理后,將結(jié)果保存在F2.DAT中)

1.準(zhǔn)備數(shù)據(jù)文件(可以在各種編輯器中完成,輸入格式及寬度與程序要求的一致),數(shù)據(jù)文件名的后綴為*.DAT(也可以是*.txt);

2.編寫數(shù)據(jù)輸入和數(shù)據(jù)處理文件,最后將結(jié)果輸出到F2.DAT中.10土木學(xué)院11土木學(xué)院

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的內(nèi)容A=_123.10B=_123.20

C=_246.30F2.DAT的內(nèi)容數(shù)據(jù)輸出數(shù)據(jù)輸入和數(shù)據(jù)處理注:該源文件與數(shù)據(jù)文件放在同一目錄中12土木學(xué)院這是已被打開的數(shù)據(jù)文件的內(nèi)容13土木學(xué)院14土木學(xué)院 U1=2

Open(Unit=2,File='F2.DAT',Status='New',$Access='Sequential',Form='Formatted')do10I=1,30 write(*,*)"請(qǐng)輸入學(xué)號(hào)、兩門成績(jī)" Read(*,*)N,A,B C=A+BWrite(2,202)'學(xué)號(hào):',N,'總成績(jī)',C10 continue Close(2)100Format(I2,F5.1,F5.1)202Format(A,I2,A,F7.1)End

輸入30個(gè)學(xué)生的學(xué)號(hào)和兩門成績(jī),最后將總成績(jī)與學(xué)號(hào)輸出來(lái).15土木學(xué)院這是打開數(shù)據(jù)文件F2.DAT的內(nèi)容16土木學(xué)院13.1有格式順序存取文件打開文件(Open):是把一個(gè)設(shè)備號(hào)和一個(gè)文件名關(guān)聯(lián)起來(lái),這樣在程序中將由設(shè)備號(hào)代替指定的文件;Unit=ie代表設(shè)備號(hào)(0~99)File=ce代表文件名;Status=se代表文件狀態(tài):已經(jīng)存在-Old;新建-NewAccess=SD代表文件的存取方式:

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

Open(Unit=2,File='F2.DAT',Status='New',Access='Sequential',Form='Formatted')17土木學(xué)院13.1有格式順序存取文件關(guān)閉文件(Close):解除設(shè)備號(hào)和一個(gè)文件名的關(guān)聯(lián).CLOSE(設(shè)備號(hào))一次只關(guān)閉一個(gè)設(shè)備號(hào);

在程序中的STOP\END語(yǔ)句都具有Close的功能順序文件的輸入操作:

READ(設(shè)備號(hào),格式說(shuō)明,END=語(yǔ)句標(biāo)號(hào))變量表順序文件的輸出操作:

Write(設(shè)備號(hào),格式說(shuō)明)輸出項(xiàng)表與OPEN中指定的設(shè)備號(hào)相同一般不寫18土木學(xué)院舉例:讀出一個(gè)數(shù)據(jù)文件記錄,并把它顯示在屏幕上

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將文件指針重新設(shè)置在文件開頭(與設(shè)備號(hào)2連接的文件的開頭)End=30表示一旦讀到文件結(jié)束標(biāo)志就不再進(jìn)行讀操作而轉(zhuǎn)到標(biāo)號(hào)為30的語(yǔ)句繼續(xù)執(zhí)行。19土木學(xué)院20土木學(xué)院這是打開數(shù)據(jù)文件TAB.DAT的內(nèi)容21土木學(xué)院 IntegerN(30) RealA(30),B(30),C(30) Write(*,*)“請(qǐng)從鍵盤上輸入學(xué)號(hào)、兩門成績(jī)" 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

使用數(shù)組:輸入30個(gè)學(xué)生的學(xué)號(hào)和兩門成績(jī),最后將總成績(jī)與學(xué)號(hào)輸出來(lái).22土木學(xué)院23土木學(xué)院13.1有格式順序存取文件

--順序文件輸入輸出的基本規(guī)則Read語(yǔ)句中各輸入項(xiàng)在類型上、格式說(shuō)明上必須與輸出語(yǔ)句的輸出項(xiàng)按位置一一對(duì)應(yīng);Open或Rewind是從文件的第一個(gè)記錄開始輸入,每執(zhí)行一次Read語(yǔ)句,總是從一個(gè)新的記錄開始讀入;在Read語(yǔ)句讀文件記錄時(shí),輸入項(xiàng)少于記錄中的數(shù)據(jù)項(xiàng),則剩余數(shù)據(jù)被忽略.輸入項(xiàng)多于記錄中的數(shù)據(jù)項(xiàng),它將接著去讀下一個(gè)記錄,直到所有項(xiàng)都獲得數(shù)據(jù)或者遇上文件結(jié)束標(biāo)志為止;在程序設(shè)計(jì)中對(duì)一個(gè)順序文件不可能做到“重寫前半部分而保留后半部分”這樣的操作。24土木學(xué)院13.1有格式順序存取文件

--順序文件輸入輸出的基本規(guī)則一個(gè)WRITE語(yǔ)句總是開始一個(gè)新的記錄;一般來(lái)說(shuō),對(duì)同一個(gè)文件在進(jìn)行寫操作之后要進(jìn)行讀操作時(shí),必須先使用文件定位語(yǔ)句,重新設(shè)置指針位置(Open語(yǔ)句、Rewind語(yǔ)句以及Backspace語(yǔ)句等);也可以使用表控輸入輸出語(yǔ)句對(duì)文件進(jìn)行格式輸入輸出,如:WRITE(3,*)N,M。Next25土木學(xué)院13.2有格式直接存取文件直接存取可以任意確定需要讀寫記錄的位置;直接存取只適用于磁盤文件;其基本的操作與順序存取大致相同,主要不同的是:Open的說(shuō)明、Read和Write的控制項(xiàng)不同。 下面以例說(shuō)明26土木學(xué)院13.2有格式直接存取文件主要語(yǔ)句:Open(12,File=‘Datb.Dat’,Status=‘New’,

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

Recl=16

?)記錄的長(zhǎng)度,以字節(jié)為單位。在直接存取文件中每個(gè)記錄的長(zhǎng)度是相等的,但真正寫到文件中的實(shí)際字節(jié)的個(gè)數(shù)可以比說(shuō)明的長(zhǎng)度短。下面舉例:

1)建立一個(gè)直接存取文件;

2)根據(jù)用戶輸入記錄號(hào),輸

出該記錄。27土木學(xué)院 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語(yǔ)句輸出到屏幕上記錄的長(zhǎng)度,以字節(jié)為單位。在直接存取文件中每個(gè)記錄的長(zhǎng)度是相等的,但真正寫到文件中的實(shí)際字節(jié)的個(gè)數(shù)可以比說(shuō)明的長(zhǎng)度短。記錄號(hào):是不可少的參數(shù),文件的第一個(gè)記錄的記錄號(hào)為128土木學(xué)院 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土木學(xué)院30土木學(xué)院這是打開數(shù)據(jù)文件Datb.DAT的內(nèi)容31土木學(xué)院13.2有格式直接存取文件記錄長(zhǎng)度說(shuō)明RECL=ie:該整形數(shù)表達(dá)式的值指定記錄的長(zhǎng)度,以字節(jié)為單位。在直接存取文件中每個(gè)記錄的長(zhǎng)度是相等的,但真正寫到文件中的實(shí)際字節(jié)的個(gè)數(shù)可以比說(shuō)明的長(zhǎng)度短(不能超過(guò)說(shuō)明長(zhǎng)度)。輸入和輸出語(yǔ)句中的REC=記錄號(hào):是不可少的參數(shù),文件的第一個(gè)記錄的記錄號(hào)為1。在執(zhí)行Read語(yǔ)句時(shí),按格式讀入的記錄長(zhǎng)度必須小于或等于Open語(yǔ)句中說(shuō)明的記錄長(zhǎng)度。32土木學(xué)院13.2有格式直接存取文件

--直接存取文件輸入輸出的基本規(guī)則直接存取文件中每個(gè)記錄的長(zhǎng)度必須相等,如果實(shí)際輸出的記錄長(zhǎng)度不等,在操作時(shí)選取最大的記錄長(zhǎng)度作為文件每個(gè)記錄的長(zhǎng)度;記錄長(zhǎng)度由相應(yīng)的Format格式規(guī)定的輸出所占域?qū)拋?lái)決定;如果是原來(lái)已經(jīng)存在的(Old)數(shù)據(jù)文件,在Open語(yǔ)句中說(shuō)明的記錄長(zhǎng)度必須應(yīng)與實(shí)際的記錄長(zhǎng)度一致。用直接方式建立的文件可以采用順序方式打開并進(jìn)行讀操作;用順序方式建立的文件(在記錄長(zhǎng)度相等時(shí)),直接方式也可打開并進(jìn)行讀操作。Next33土木學(xué)院13.3無(wú)格式文件的存取在實(shí)際應(yīng)用中,往往是有大量的數(shù)據(jù)是作為中間結(jié)果保存下來(lái)(不是為了人們閱讀,而是用于計(jì)算機(jī)繼續(xù)處理,而且只能保存在磁盤或磁帶上)。這種數(shù)據(jù)是以二進(jìn)制數(shù)據(jù)格式存放的,需要時(shí)無(wú)需轉(zhuǎn)換就能直接使用;無(wú)格式文件的存放也是分為按順序方式和直接方式兩種,在Open語(yǔ)句中的Form是:

Form=‘unformatted’34土木學(xué)院13.3無(wú)格式文件的存取在進(jìn)行無(wú)格式輸入輸出時(shí),操作與上基本相同,但語(yǔ)句中沒(méi)有格式說(shuō)明這一項(xiàng),如:

Write(10)I,J

Write(2,REC=K)I,J

Read(10,END=100)無(wú)格式文件只能進(jìn)行無(wú)格式讀或?qū)?,每?zhí)行一次輸出、輸入語(yǔ)句就輸出或讀入一個(gè)記錄。讀文件的時(shí)候,輸入項(xiàng)表中各項(xiàng)的類型必須與寫記錄時(shí)輸出項(xiàng)表中各項(xiàng)的類型一一對(duì)應(yīng)。Next35土木學(xué)院13.4文件操作語(yǔ)句Open(說(shuō)明項(xiàng));Close(說(shuō)明項(xiàng));Rewind(說(shuō)明項(xiàng));Backspace(說(shuō)明項(xiàng));

它使指定設(shè)備號(hào)的文件指針回退一個(gè)記錄位置,通常用在順序文件存取中.Read(說(shuō)明項(xiàng))[輸入項(xiàng)表];Write(說(shuō)明項(xiàng))[輸入項(xiàng)表];Next36土木學(xué)院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土木學(xué)院13.5程序舉例38土木學(xué)院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土木學(xué)院13.5程序舉例40土木學(xué)院 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以下是產(chǎn)生一個(gè)隨機(jī)數(shù)程序

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論