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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第十三章

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

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

其存取操作必須從頭到尾順序進行;

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

在程序的執(zhí)行過程中對任意一個指定的

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

1.字符形式(ASCII)

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

FORMATTED

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

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

UNFORMATTED4土木學院本章主要內容:有格式順序存取文件;有格式直接存取文件;無格式文件的存取;文件操作語句;有關文件操作的程序舉例。5土木學院13.1有格式順序存取文件我們已經知道:READ語句是完成數(shù)據輸入任務的。從鍵盤輸入一行數(shù)據(以Enter鍵作為確認),這就形成了一個“記錄”。從鍵盤輸入一行數(shù)據時,必須與指定的格式對應(格式編輯符與輸入的數(shù)據類型以及寬度),否則就會出錯(或報錯)。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從鍵盤接收數(shù)據,經過處理,然后輸出顯示.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有格式順序存取文件下面我們就介紹如何從文件中獲得數(shù)據:

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

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

2.編寫數(shù)據輸入和數(shù)據處理文件,最后將結果輸出到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的內容數(shù)據輸出數(shù)據輸入和數(shù)據處理注:該源文件與數(shù)據文件放在同一目錄中12土木學院這是已被打開的數(shù)據文件的內容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土木學院這是打開數(shù)據文件F2.DAT的內容16土木學院13.1有格式順序存取文件打開文件(Open):是把一個設備號和一個文件名關聯(lián)起來,這樣在程序中將由設備號代替指定的文件;Unit=ie代表設備號(0~99)File=ce代表文件名;Status=se代表文件狀態(tài):已經存在-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):解除設備號和一個文件名的關聯(lián).CLOSE(設備號)一次只關閉一個設備號;

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

READ(設備號,格式說明,END=語句標號)變量表順序文件的輸出操作:

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

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的語句繼續(xù)執(zhí)行。19土木學院20土木學院這是打開數(shù)據文件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

使用數(shù)組:輸入30個學生的學號和兩門成績,最后將總成績與學號輸出來.22土木學院23土木學院13.1有格式順序存取文件

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

--順序文件輸入輸出的基本規(guī)則一個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

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

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

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

Form=‘unformatted’34土木學院13.3無格式文件的存取在進行無格式輸入輸出時,操作與上基本相同,但語句中沒有格式說明這一項,如:

Write(10)I,J

Write(2,REC=K)I,J

Read(10,END=100)無格式文件只能進行無格式讀或寫,每執(zhí)行一次輸出、輸入語句就輸出或讀入一個記錄。讀文件的時候,輸入項表中各項的類型必須與寫記錄時輸出項表中各項的類型一一對應。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以下是產生一個隨機數(shù)程序

溫馨提示

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

評論

0/150

提交評論