fortran文件操作open分析_第1頁
fortran文件操作open分析_第2頁
fortran文件操作open分析_第3頁
fortran文件操作open分析_第4頁
fortran文件操作open分析_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1.文件讀取的概念:讀取:“順序讀取”和“直接讀取”。保存:“文本文件”和“二進(jìn)制文件”。二進(jìn)制文件:讀取快,因?yàn)楸4娓袷胶蛿?shù)據(jù)在內(nèi)存中的保存方法一樣,同時(shí)也節(jié)省空間。2. 文件的操作:open的使用:使用open命令打開文件之后,就可以對文件來做輸入輸出。example:program ex0901impicit noneopen(unit=10, file=hello.txt) ! 打開hello.txt文件, unit指定文件代碼,file指定文件名稱。write(10, *) hello !在代碼為10的文件中寫入hellostopend program ex0901open中有很多參

2、數(shù)可以使用,詳細(xì)如下:OPEN(UNIT=number, FILE=filename, FORM=., STATUS=., ACCESS=., RECL=length, ERR=label, IOSTAT=iostat, BLANK=., POSITION=., ACTION=action, PAD=., DELIM=.)UNIT=number:number必須是一個(gè)正整數(shù),它可以使用變量或是常量來賦值。number最好避開1,2,5,6。因?yàn)?,6是默認(rèn)的輸出位置,也就是屏幕。1,5則是默認(rèn)的輸入位置,鍵盤。FILE=filename: 指定要打開的文件名稱,文件名要符合系統(tǒng)規(guī)定。windo

3、ws下不區(qū)分大小寫,unix下則會(huì)區(qū)分大小寫,最好不要使用中文文件名。FORM=FORMATTED OR UNFORMATTEDFORM字段只有兩個(gè)值可以設(shè)置:FORM=FORMATTED “文本文件”格式來保存FORM=UNFORMATTED “二進(jìn)制文件”格式保存這一欄不給定時(shí)候的默認(rèn)值是: FORM=FORMATTEDSTATUS=NEW or OLD or SCRATCH or UNKNOWN 用來說明打開一個(gè)新的文件或已經(jīng)存在的舊文件。STATUS=NEW 打開一個(gè)原本不存在的新文件STATUS=OLD 打開一個(gè)原來已經(jīng)存在的文件STATUS=REPLACE 若文件已經(jīng)存在則重新創(chuàng)建

4、一次,原來的內(nèi)容消失;若不存在則會(huì)創(chuàng)建新文件。STATUS=SCRATCH 表示要打開一個(gè)暫存文盤,這個(gè)時(shí)候可以不需要指定文件名稱,也就是FILE這個(gè)一欄可以忽略。因?yàn)槌绦虮旧頃?huì)自動(dòng)取一個(gè)文件名,至于文件名是啥也不重要,因?yàn)闀捍姹P會(huì)在程序結(jié)束后自動(dòng)刪除。STATUS=UNKNOWN 由各編譯器自定義。通常會(huì)同REPLACE的效果。!這一欄不給定時(shí),默認(rèn)為STATUS=UNKNOWN。ACCESS=SEQUENTIAL or DIRECT 設(shè)置讀寫文件的方法:ACCESS=SEQUENTIAL 讀寫文件的操作會(huì)以“順序”的方法來做讀寫,“順序讀取文件”。ACCESS=DIRET 讀寫文件的操作可

5、以任意指定位置,“直接讀取文件”。!不賦值時(shí)候,默認(rèn)為: ACCESS=SEQUENTIAL。RECL=length 在順序讀取文件中,RECL字段值用來設(shè)置一次可以讀取多大容量的數(shù)據(jù)。打開“直接讀取文件”,RECLlength的length值是用來設(shè)置文件中每一個(gè)模塊單元的分區(qū)長度。length的單位在文本根式下為1個(gè)字符,也就是1 byte。在二進(jìn)制格式下則由編譯器自行決定,一般可能為1 byte (G77) 或 4 byte (Visual Fortran)。ERR=LABEL這個(gè)字段用來設(shè)置當(dāng)文件打開發(fā)生錯(cuò)誤時(shí),程序會(huì)跳躍到LABEL所指定的行代碼處來繼續(xù)執(zhí)行程序。IOSTAT=var

6、這個(gè)字段會(huì)設(shè)置一個(gè)整數(shù)值給后面的整型變量,這是用來說明文件打開的狀態(tài),數(shù)值會(huì)有下面三種情況:var0 表示讀取操作錯(cuò)誤var=0 表示讀取操作正常var0 表示讀取操作發(fā)生錯(cuò)誤。 stat=0 表示讀取操作正常。 stat0 文件讀取操作錯(cuò)誤 stat=0 文件讀取操作正常 stat0 文件終了ERR=errlabel 發(fā)生錯(cuò)誤時(shí)會(huì)轉(zhuǎn)移到復(fù)制的代碼行繼續(xù)執(zhí)行程序。EXIST=exist 檢查文件是否存在,返回布爾變量,真表示存在,假值表示不存在。OPEND=opened 檢查文件是否用已經(jīng)用open打開,返回布爾變量,真表示已經(jīng)打開,假表示尚未打開。NUMBER=number 用文件名來查詢這

7、個(gè)文件所給定的代碼。NAMED=named 查詢文件是否取了名字,也就是檢查文件是否為臨時(shí)保存盤,返回值為邏輯數(shù)。ACCESS=access 檢查文件的讀取格式,返回一個(gè)字符串,可以是: SEQUENTIAL 代表文件使用順序讀取格式 DIRECT 代表文件使用直接讀取格式 UNDEFINED 代表沒有定義SEQUENTIAL=sequential 查看文件是否使用順序格式,會(huì)返回一個(gè)字符串,可以是: YES 代表文件是順序讀取文件 NO 代表文件不是順序讀取文件 UNKNOWN 代表不知道DIRECTdirect 查看文件是否使用直接格式,會(huì)返回一個(gè)字符串,可以是: YES 文件是直接讀取文

8、件 NO 文件是非直接讀取文件 UNKNOWN 代表不知道FORM=form 查看文件的保存方法,返回字符串,可以是: FORMATTED 打開的是文本文件 UNFORMATTED 打開的是二進(jìn)制文件 UNDEFINED 沒有定義FORMATTED=fmt 查看文件是否是文本文件,返回字符串,可以是: YES 本文件是文本文件 NO 本文件非文本文件 UNDEFINED 無法判斷UNFORMATTED=fmt 查看文件是否是二進(jìn)制文件,返回字符串,可以是: YES 本文件是二進(jìn)制文件 NO 本文件非二進(jìn)制文件 UNKNOWN 無法判斷RECL=length 返回open文件時(shí)recl欄的設(shè)置值

9、。NEXTREC=nr 返回下一次文件讀寫的位置。BLANK=blank 返回值是字符串,用來查看open文件時(shí)的blank參數(shù)所給定的字符串值。以下是fortran 90的添加功能:POSITION=position 返回打開文件時(shí)position字段所給定的字符串, 可能是REWIND,APPEND, ASIS, UNDEFINEDACTION=action 返回打開文件時(shí)action 字段所賦值的字符串,可能是READ, WRITE, READWRITE。READ=read 返回字符串,檢查文件是否為只讀文件: YES 文件是只讀的 NO 文件不是只讀的 UNKNOWN 無法判斷WRIT

10、E=write 返回一個(gè)字符串,檢查文件是否可寫入: YES 文件可以寫入 NO 文件不可以寫入 UNKNOWN 無法判定READWRITE=readwrite 返回一個(gè)字符串,檢查文件是否可以同時(shí)讀及寫:YES 文件可以同時(shí)讀寫NO 文件不可以同時(shí)讀寫UNKNOWN 無法判定DELIM=delim 返回打開文件時(shí),DELIM字段所設(shè)置的字符串,返回值可以是: APOSTROPHE, QUOTE, NONE, UNDEFINEDPAD=pad 返回打開文件時(shí)PAD字段所設(shè)置的字符串,返回值可以是:YES, NO。其他文件運(yùn)行命令:BACKSPACE(UNIT=number, ERR=errla

11、bel, IOSTAT=iostat) 把文件讀寫位置退回一步。ENDFILE(UNNIT=number, ERR=errlabel, IOSTAT=iostat)使用這個(gè)命令會(huì)把目前文件的讀寫位置變成文件的結(jié)尾。REWIND(UNIT=number, ERR=errlabel, IOSTAT=iostat)把文件的讀寫位置倒回到文件開頭。CLOSE(UNIT=number, STATUS=string, ERR=errlabel, IOSTAT=) 把文件關(guān)閉,不要進(jìn)行讀寫操作。 STAT=KEEP 會(huì)在文件關(guān)閉后,保留這個(gè)文件。是默認(rèn)狀態(tài)。 STAT=DELETE 在文件關(guān)閉后,消除這個(gè)文

12、件。!程序結(jié)束時(shí)候會(huì)自動(dòng)關(guān)閉文件,不過最好要養(yǎng)成自己關(guān)閉文件的習(xí)慣。!在讀文件的時(shí)候要懂得略掉一些沒有必要的數(shù)據(jù),如文件中的注釋行。!自由格式的數(shù)據(jù)文件讀?。梢韵茸x入前面的判斷字符,結(jié)合select case或其他方法判斷讀入的數(shù)據(jù))!在open,read,write時(shí)使用不同的unit值,就可以打開多個(gè)文件。最好不要同時(shí)打開很多個(gè)文件。順序文件(SEQUENTIAL):在讀寫時(shí),不能任意賦值到文件的某個(gè)位置讀寫數(shù)據(jù),只能從開頭開始一步步向下進(jìn)行。在改變文件讀寫位置時(shí),只能一步步地退,或是直接移回到文件開頭。直接訪問文件:把文件的空間,內(nèi)容,事先分區(qū)成好幾個(gè)同樣大小的小模塊,這些模塊會(huì)自動(dòng)安

13、順序編號。讀寫文件時(shí),要先賦值文件讀寫位置在第幾個(gè)模塊,再進(jìn)行讀寫的工作。直接訪問文件可以任意到文件的任何一個(gè)地方來讀寫。在使用直接訪問文件時(shí),要小心使用endfile命令,使用這個(gè)命令會(huì)把目前所在的文件位置之后的數(shù)據(jù)都清除掉。二進(jìn)制文件的操作:使用二進(jìn)制文件來做直接讀取時(shí),open命令中的recl字段所設(shè)置的整數(shù)n值所代表的大小會(huì)隨編譯器不同而改變。每個(gè)編譯器應(yīng)該都可以經(jīng)過設(shè)置來改變r(jià)ecl字段的單位大小。二進(jìn)制文件沒有必要在數(shù)據(jù)之間用區(qū)分符號來增加文件的可讀性,因?yàn)槎M(jìn)制文件本身就沒有可讀性。二進(jìn)制文件是直接把內(nèi)存的二進(jìn)制數(shù)據(jù)寫入文件,就沒有所謂的格式化輸入出存在。存放“精確”及“大量”的

14、數(shù)據(jù)時(shí),使用二進(jìn)制文件是比較好的選擇。二進(jìn)制文件也可以使用順序格式來操作,順序格式下顯示來的二進(jìn)制文件,每個(gè)數(shù)據(jù)的前后都會(huì)被編譯器補(bǔ)上一些額外的信息,所生成的文件不太容易被其他程序讀取。關(guān)于以上文件操作詳細(xì)見fortran 95程序設(shè)計(jì)9395。Internal File(內(nèi)部文件)使用寫入文件的方法,把數(shù)據(jù)寫到一個(gè)字符串變量中。example:a=2b=3character (len=20) : stringwrite (unit=string, fmt=(I2,+,I2,=,I2) a, b, a+b !把字符串變量當(dāng)作輸出的目的。write(*, *) string結(jié)果: 2+ 3= 5

15、還可以經(jīng)過read命令從字符串讀入數(shù)據(jù):integer : acharacter (len=20) : string=123read(string, *) awrite(*, *) a在某些情況下需要使用內(nèi)部文件來設(shè)置數(shù)據(jù):使用read命令從鍵盤輸入數(shù)據(jù)時(shí),如果用戶輸入錯(cuò)誤的數(shù)據(jù),會(huì)導(dǎo)致死機(jī)。如需要輸入整數(shù)時(shí)卻輸入英文字母,就可能會(huì)死機(jī)。比較好的處理辦法是,程序先暫時(shí)把數(shù)據(jù)當(dāng)作字符串讀入,檢查字符串中是否含有不合理的字符,如果字符串中都是09的數(shù)字字符,就把字符串轉(zhuǎn)成整數(shù),不然就請用戶在輸入一次。內(nèi)部文件還可應(yīng)用在動(dòng)態(tài)改變輸出格式,輸出格式可以事先存放在字符串中,程序進(jìn)行時(shí),動(dòng)態(tài)改變字符串內(nèi)容

16、就可以改變輸出格式。(見書P263)NAMELIST:NAMELIST是很特殊的輸入輸出方法,收錄在f90標(biāo)準(zhǔn)當(dāng)中,f90中有統(tǒng)一NAMELIST的格式。NAMELIST可以把一組相關(guān)變量封裝在一起,輸入出這一組變量時(shí),只要在write/read中的NML字段賦值使用哪一個(gè)NAMELIST就行了。example:program ex0918 implicit none integer : a = 1, b = 2, c= 3 namelist /na/ a,b,c write(*,nml=na) stopend program ex0918&NAA = 1,B = 2,C = 3,/程序中把a(bǔ)

17、,b,c這三個(gè)變量放在名字叫做na的namelist中。namelist也算是聲明的一部分,必須編寫在程序執(zhí)行命令前面。NAMELIST的語法很類似COMMON,不過使用namelist時(shí)一定要取名字:namelist /nl_name/ var1, var2, . !后面的變量會(huì)放在nl_name這個(gè)namelist中。封裝好namelist后,在write的NML字段中指名要輸出哪一個(gè)namelist,就可以把namelist中的變量全部輸出。write(*,nml=na) !輸出na這個(gè)namelist輸出namelist時(shí)候不能賦值輸出格式,f90標(biāo)準(zhǔn)中規(guī)定輸出namelist時(shí)首先會(huì)輸出符號&,后面緊接著這個(gè)namelist的名字。接著會(huì)根據(jù)順序輸出變量的名稱,等號以及內(nèi)容,變量之間用空格或逗號來做分隔,最后使用除號來作結(jié)束。至于每個(gè)數(shù)值內(nèi)容會(huì)使用何種格式輸出由編譯器自行決定。NAMELIST也可以用來輸入數(shù)據(jù),不過通常都會(huì)用來讀取文件,不會(huì)用在鍵盤輸入。輸入格式需要按照前面的格式。&na ./ 不需要按照變量順序輸入,程序會(huì)自動(dòng)按照變量名稱來設(shè)置數(shù)值。變量甚至可以重復(fù)輸入,不過變量會(huì)得到最后一次設(shè)置的數(shù)值。namelist通常使用在文本文件的輸入輸出中,使用read從文件中讀取數(shù)據(jù)時(shí),會(huì)自動(dòng)從目前的位置向下尋

溫馨提示

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

評論

0/150

提交評論