【Fortran】Fortran中Open, Read 和 Write的用法


轉:【Fortran】Fortran中Open, Read 和 Write的用法 - 小孔雀 - 博客園 (cnblogs.com)

1:write(*,*)"string";write(unit=*,FMT=*)"string";write(unit=6,FMT=*)"string"。以上等價,6是默認輸出位置,即屏幕。

2:print*,"string"。Print只能對屏幕輸出。
3:integer(kind=4) a !f90;integer*4 a !f77;integer(4) a !f77。以上等價。
real(kind=4) a !f90;real*4 a !f77;real(4) a !f77。以上等價。
4:f77,變量名長度1~6;f90,變量名長度1~31。
5:read(*,*)"string";write(unit=*,FMT=*)"string";write(unit=5,FMT=*)"string"。以上等價,5是默認輸入位置,即鍵盤。
6:FORMAT
6.1 格式輸出格式輸出語句由兩部分組成:輸出語句和輸出格式語句。輸出語句的一般形式為:WRITE(*,L) 輸出表列 或: PRINT L 輸出表列其中:* 代表隱含的輸出設備,L 指輸出格式語句的標號。輸出格式語句的一般形式:L FORMAT(1X,S)其中:L 輸出格式語句的標號,1X 縱向走紙符,S 輸出格式,用不同的“格式編輯符”(簡稱“編輯符”)來實現指定的輸出格式,各格式間用逗號相隔。FORMAT語句又叫“格式語句”,是一個非執行語句,本身不產生任何操作,只是提供輸入或輸出的格式。FORMAT語句可以出現在程序的任何地方(但必須在PROGRAM語句之后和END語句之前,如果在子程序中用FORMAT語句,則應在子程序定義語句之后)。系統按WRITE語句或PRINT語句中指定的語句標號找到相應的FORMAT語句,並按FORMAT語句所規定的格式對數據進行輸出。注意,PRINT語句中不能再用“*”,PRINT語句中的第一個標識符是語句標號而不是要打印輸出的數據。
輸出格式分兩類 基本格式6.1.1 I格式(又叫整數格式)一般形式:Iw 或:Iw.m其中:w 一個數據占的位數寬度(又稱“字段寬度”),m 需要輸出的最少數字位數。例1:WRITE (*,100)M,N100 FORMAT(1X,I4,I4)如果M=40,N=-12,則輸出如下:??40 ?-12例2:WRITE (* , 100) I,J,K100 FORMAT(1X,I5.3,I6.3,I4)若 I=1234, J=-24, K=24689 則輸出為:?1234 ???-24 ****(1)數字在指定的區域內向右端靠齊,如果數字位數比指定的字段寬度w小,則左邊補以空格。負數的符號也包含在字段寬度內。(2)如果數字位數超過了規定的字段寬度w,則不輸出有效數據,而在該字段寬度范圍內充滿“*”符號。(3)如果數字位數超過了m,則按實際應輸出的位數輸出(但條件是不能超過w)。m不包括負號所占的一列。
6.1.2 F格式(又叫小數型格式)一般形式:Fw.dw 各數值占的總位數 d 輸出數據的小數位數(小數點后的位數)。 例1:WRITE(*,100)A,B,C100 FORMAT(1X,F10.2,F9.3,F8.4)若 A=1234.56, B=3456.78,C=234.56789 則輸出:???1234.56 ?3456.780 234.5679例2:WRITE (* , 100) X,Y100 FORMAT(1X,F10.4,F10.2)若 X=24680135.7, Y=0.0012345, 則輸出為:********** ???????.00(1)數字在指定區域內向右端靠齊,如果數字位數(含小數點和符號位)比指定的字段寬度w小,則左邊補以空格;如果數字的位數超過了規定的字段寬度w,則不輸出有效數據,而在該字段寬度范圍內充滿“*”符號。
(2)如果數據的小數位數比指定的小數位數d小,則在小數右邊補0以湊足d位;如果小數位數大於d位,則輸出時多於的小數位數按“四舍五入”規則舍去。
(3)假設b為數據整數部分的位數,則應使w≥b+d+1(小數點占一列),如果輸出負數,則應保證w≥b+d+2(小數點和負號各占一列)。(4)用F格式輸出時應注意,由於難以事先確切估計出數據的大小,輸出大的數時容易產生“寬度不夠”的錯誤(由於w不夠大),輸出小的數時會出現丟掉有用數字的情況(由於d不夠大而將后面的數字截去),這就是“大數印錯,小數印丟”。
6.1.3 E格式(又叫指數型格式)一般形式:w.dw 各數值占的總位數,d 輸出數據的小數位數(小數點后的位數)。例1:WRITE (*,100)X,Y100 FORMAT(1X,E12.4, E12.5 )如:X=3.17 Y=1234.56 則輸出結果為:??0.3170E+01 ?0.12346E+04。(1)采取標准化的指數形式輸出一個實數,d為以指數形式出現的數據的數字部分的小數位數。(2)指數部分一般占4列,其中字母“E”和指數的符號各占一列,指數2列。小數部分d列,再加上一個小數點和小數點前的一個“0”,因此要保證w≥d+6,輸出負數時,w≥d+7。(3)有的計算機系統允許有較大的實數范圍,FORTRAN77提供了一種擴充的編輯符,可以輸出三位或四位指數。這種編輯符的形式為:Ew.dEe,用e指定指數的位數。有的計算機系統的FORTRAN編譯系統已根據其允許的實數范圍,自動將指數的位數改為3位或4位,不必在RORMAT語句中用Ew.dEe編輯符單獨為某些數據指定所需的指數位數,只需寫Ew.d形式即可,輸出時系統會給出三位(或四位)指數。
6.1.4 G格式G格式可以根據輸出的實數大小決定用小數形式(F格式)輸出或指數形式(E格式)輸出。當輸出大數值或小數值時自動按E格式,當輸出的數不大不小時用F格式。其一般形式為:Gw.d(1)凡絕對值小於0.1的數或絕對值大於10d的數用E格式輸出;其余的數用F格式輸出。(2)用E格式輸出時,最后4列為指數部分,而用F格式輸出時最后4列留空。(3)用指數形式輸出時,格式同Ew.d;用F格式輸出時,不是按Fw.d形式輸出,d規定的不是小數位數而是打印出來的全部數字的位數,小數位數根據數值大小和d的大小而定,這樣做的目的是使數的整數部分能全部保留,而適當截去小數部分,以保證輸出數值的正確性。因為小於10d的數,其整數部分最多為d位,因此,可以全部輸出這d位整數,小數的位數為:d-(數值整數位數)。
6.1.5 D格式一般形式:Dw.a用於雙精度數據的輸出,使用方法與E格式相仿,只是把字母“E”換成“D”。
6.1.6L格式一般形式:Lw用於邏輯型數據的輸出,w 輸出數據的字段寬度。邏輯值“.TRUE.",在輸出時打印一個字母T;邏輯值".FLASE.",在輸出時打印一個字母F。T和F打印在字段范圍內的最右端。
6.1.7 A格式一般形式:Aw 或:A用於字符型數據的輸出,w為字段寬度,不指定w時(即形式:A),按字符變量的實際長度(即程序定義該變量時的長度)輸出。字符串在指定的區域內向右端靠齊,如果字符串的位數比指定的字段寬度w小,則左邊補以空格;如果字符串的位數超過了規定的字段寬度w,則只輸出最左面的w個字符。
6.1.8 ‘(撇號)格式用來插入所需的字符串,例如:WRITE(*,100) I,J100 FORMAT(1X,'I=',I3,'J=',I4)如果I=123,J=2347,則輸出:I=123J=2347如果需要輸出的字符包括撇號,則用兩個連續的撇號代表一個被輸出的撇號字符。例如:CHARACTER *10 STUDREAD * STUDWRITE(*,10) STUD10 FORMAT(1X,A,'IS LI''S STUDENT.')END如果輸入給STUD的值為‘ZHANG SUN’,則輸出為:ZHANG SUN IS LI'S STUDENT.
6.1.9 H格式一般形式:nH <字符串>用來輸出字符常量,與撇號格式相似。n為字符串中字符的個數。如上面的例子(I=123,J=2347),可改寫為:WRITE(*,100) I,J100 FORMAT(1X,2HI=,I3,2HJ=,I4)則輸出與上例相同:I=123J=2347可以單獨用撇號格式或H格式輸出字符串而不必要求WRITE語句中有相應的輸出項。如:WRITE(*,100)100 FORMAT(1X,'ZHANG SUN IS LI''S STUDENT.')或:100 FORMAT(1X,26HZHANG SUN IS LI'S STUDENT.)用H格式必須准確地數出字符串中的字符個數,數錯了就會造成錯誤。所以最好不用H編輯符而用撇號編輯符,后者不必數字符,使用方便,字符串界線清楚無誤。FORTRAN 77之所以保留H編輯符主要是為了與FORTRAN 66兼容(FORTRAN 66只能用H編輯符輸出字符串而沒有撇號編輯符)。
6.1.10 X格式一般形式:nX用於輸出空格,n 輸出的空格數目。即插入n個空格,或者說,使打印的“當前位置”向右移動n列。例:WRITE(*,100)I,A,B100 FORMAT(1X,I3,2X,F6.2,2X,E11.5)當I=146,A=124.32,B=1247.32時,輸出為:146 124.32 0.12473E+04如果不用X格式插入空格,數據將連成一片,難以區分開。注意:不要把2X作為與A對應的格式符,WRITE語句中的I,A,B分別與FORMAT語句中的I3,F6.2和E11.5格式符對應。X格式符不能用來提供整數、實數、以及其它類型數據的輸出格式,它只能插入若干個空格。FORTRAN 77還允許n是負整數,表示從當前位置向左移動n的絕對值列。微機上使用的FORTRAN子集不能使用n為負值的格式符。
6.1.11 /(斜杠)格式斜杠(/)編輯符的作用是:結束本記錄的輸出並開始下一個記錄的輸出。例如:WRITE(*,100)I,A,J,B100 FORMAT(1X,I3,F6.1/1X,I3,F6.1)若I=246,A=12.36,J=35,B=173.5,輸出結果為:246 12.435 173.5一個WRITE語句輸出打印了二行信息,這是由於FORMAT語句中有一斜杠,使之產生兩個輸出記錄(注意,斜杠之后也有一個“1X”,使第二個記錄的第一個字符為“空格”,作為縱向走紙符)。如果有兩個連續的斜杠,如:100 FORMAT(1X,I3,F6.1//1X,I3,F6.1)輸出完第一行后,空一行,再輸出第二行。即:246 12.4(空一行)35 173.5如果在編輯符的最后出現斜杠,如:100 FORMAT(1X,I3,F6.1/1X,I3,F6.1/)輸出完第二個記錄后,再輸出一個空行。即:246 12.435 173.5(空一行)
6.1.12 重復系數重復使用的編輯符可以在其前加一個重復系數,其形式為:rIw,rFw.d,rEw.d,rGw.d,rAw,rLw等,r為重復系數。以下兩個FORMAT語句等價:100 FORMAT(1X,I3,I3,F10.2,F10.2,F10.2)100 FORMAT(1X,2I3,3F10.2)如果有以下FORMAT語句:150 FORMAT(1X,I4,2X,F10.2,2X,I4,2X,F10.2,2X)其中下划線的二組編輯符是相同的,可以只寫一次而用重復系數使之重復使用:150 FORMAT(1X,2(I4,2X,F10.2,2X))
6.1.13 縱向走紙控制如果需要本行的輸出是換一行從頭開始打印的話,就應該在本行的開頭設置一個空格。“1X”的本來意義是產生一個空格,但按規定,將輸出記錄的第一個字符作為縱向走紙控制之用,它產生的動作是“走紙一行”。因此,FORMAT語句中的第一項“1X”的作用是“縱向走紙控制”。(1)打印輸出一行后不會自動換行,“打印的當前位置”(即指針)停在本行輸出的最后一個字符后面。(2)只要輸出記錄的第一個字符是空格,就可使走紙一行。因此也可以不采用“1X”而用‘ ’(即空格)也可達到同樣的目的。(3)如果不預先在輸出記錄的第一個字符處設一空格,則系統會將輸出的第一個字符作為走紙控制符,從而使本來想打印的內容缺少了一個字符。(4)如果走紙控制符為“+”表示不換行,在本行睛再疊印一行新的內容。
6.1.14 WRITE語句與FORMAT語句的相互作用輸出記錄的內容是同WRITE語句和FORMAT語句共同決定的。WRITE語句提供變量值,FORMAT語句提供字符串、空格、以及數據輸出的格式。FORMAT語句中括弧內的內容稱為“格式說明”。對這兩個語句相互關系說明如下:(1)WRITE語句中的變量個數與FORMAT語句中的I,F,E,G,D,L,A編輯符的個數可以相等也可以不等。如果變量個數少於上述編輯符個數,則多余的編輯符不起作用。(注意,上述編輯符不包括X編輯符、H編輯符、撇號編輯符,下同)。在執行格式控制時,對WRITE語句的變量表列和FORMAT語句中的格式說明同時掃描,一一對應。當變量表列結束,而FORMAT語句掃描到一個上述的編輯符,則掃描繼續下去,直到遇到非X、非H、非撇號編輯符為止。(2)如果變量個數多於格式說明中的編輯符個數,即WRITE語句中的變量表列中還有未輸出的元素,而格式說明中編輯符已用完,則重新使用該格式說明,但產生一個新記錄。(3)如果在格式說明中包含有重復使用的編輯符組,則當格式說明用完后再重新使用時,只有最右面的一個編輯符組(包括其重復系數)和它右面的編輯符被重復使用。(4)如果有輸出量,但格式說明中無相應的編輯符,則輸出永不停止。因此,如果WRITE語句中有一個或一個以上的輸出變量的話,則格式說明中至少應該有一個非X、非H(或撇號)的相應的編輯符。(5)在掃描過程中,格式說明中的各編輯符(指I,F,E,G,A,L)都要有相應的變量才能組織輸出,而X、H、撇號、斜杠等編輯符不需要有相應的輸出變量而直接進行輸出。(6)可以有“空格式說明”,如FORMAT(),用來輸出一個空行。此時WRITE語句中不應有任何輸出量。(7)遇格式說明的右括號(即最后面一外括號)或斜杠“/”時,結束本記錄的輸出,但不意味停止全部輸出。只要輸出表列中還有未輸出的量,將重復使用格式說明或按斜杠右面的格式說明組織輸出。右括號的作用與斜杠有一點不同:當掃描到右括弧而輸出表列中已無輸出變量時,輸出即告結束。而斜杠只表示結束本行輸出,即使此時已列輸出變量要輸出,輸出並未停止,它會重新開始一個新記錄,直到遇到右括號或非X、H、撇號編輯符為止。(8)FORMAT語句可以與WRITE語句相鄰,也可以放在程序任何地方(在PROGRAM語句或子程序語句之后,END語句之前),習慣上將程序中全部FORMAT語句集中放在最前或最后,並給FORMAT語句以較大的標號(一般執行語句E和小標號,FORMAT語句用大標號,如100以上或者說1000以上),以使程序清晰。(9)用表控格式輸出時,在WRITE語句中的輸出項中可包含字符串,但如果在輸出時用到FORMAT語句,則WRITE語句中不能再包含輸出的字符串。格式輸出時,如需輸出字符串,應在格式說明中設置。
7:OPEN語句(OPEN語句用於把設備號與文件名連接起來,並且對文件的各項性質進行指定。它的一般形式為:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM