2012-07-27 65 views
0

我有一個Fortran代碼,它用一個單獨的字符和數字行讀取一個txt文件,然後將它們寫入一個包含20個元素的1D數組中。 此代碼與Fortran 77編譯器Force 2.0.9不兼容。我的問題是,我們如何使用Fortran 77編譯器來應用合併過程;即定義一維數組,然後將txt文件逐行寫入數組的元素中?在一個數組中寫入字符和數字

預先感謝您。

TXT文件如下:

案例1:

10 0 1 2 0 

1.104 1.008 0.6 5.0 

25 125.0 175.0 0.7 1000.0 

0.60 

1 5 

高級案例

15 53 0 10 0 1 0 0 1 0 0 0 0 

0 0 0 0 

0 0 1500.0 0 0 .03 

0 0.001 0 

0.1 0 0.125 0.08 0.46 

0.1 5.0 0.04 

@傑森: 我是一個初學者,還在學習Fortran語言。我猜Force 2使用g77。 以下是原始代碼的相應部分。作爲結果,Force 2編輯器會返回一個空的txt文件。

 DIMENSION CARD(20) 
     CHARACTER*64 FILENAME 
     DATA XHEND/4HEND/

     OPEN(UNIT=3,FILE='CON') 
     OPEN(UNIT=4,FILE='CON') 
     OPEN(UNIT=7,STATUS='SCRATCH') 

     WRITE(3,9000) 'PLEASE ENTER THE INPUT FILE NAME : ' 
    9000 FORMAT (A) 
     READ(4,9000) FILENAME 

     OPEN(UNIT=5,FILE=FILENAME,STATUS='OLD') 
     WRITE(3,9000) 'PLEASE ENTER THE OUTPUT FILE NAME : ' 
     READ(4,9000) FILENAME 
     OPEN(UNIT=6,FILE=FILENAME,STATUS='NEW') 
     FILENAME = '...' 

     IR = 7 
     IW = 6 
     IP = 15 
    5 REWIND IR 
     I = 0 
    2 READ (5,7204,END=10000) CARD 
     IF (I .EQ. 0) WRITE (IW,7000) 
    7000 FORMAT (1H1/10X,15HINPUT DECK ECHO/10X,15(1H-)) 
     I= I + 1 
     WRITE (IW,9204) I,CARD 
     IF (CARD(1) .EQ. XHEND) GO TO 7020 
     WRITE (IR,7204) CARD 
    7204 FORMAT (20A4) 
    9204 FORMAT (1X,I4,2X,20A4) 
     GO TO 2 
    7020 REWIND IR   
+2

請張貼代碼。還要注意,Force不是編譯器,而是編輯器。它使用gfortran,g95或g77。你知道哪一個?另外,請張貼代碼。 – milancurcic 2012-07-27 21:34:57

回答

4

它看起來CARD被用作一個持有20個4個字符的字符串。我沒有看到聲明是一個字符變量,只是作爲一個數組,所以也許在極其古老的FORTRAN風格中使用非字符變量來保存字符?您使用的是20A4格式,因此必須將這些值精確定位在20個4個字符的組中。您必須添加空格,以便將它們對齊到4列的組中。

如果你想讀的數字,將它們讀入一個數值類型和使用表式IO容易得多:

real values (20) 
read (5, *) values 

然後,你就不必擔心值的精確定位在文件中。

這真的是古老的FORTRAN ...甚至在FORTRAN-77風格。我不記得上次看到Hollerith(H)格式的時候了!你從哪裏學習?

編輯:雖然我很喜歡Fortran的許多編程任務,但我不會使用FORTRAN 66!電腦應該讓事情變得更簡單......沒有理由必須數字。取而代之的

7000 FORMAT (1H1/10X,15HINPUT DECK ECHO/10X,15(1H-)) 

您可以使用

7000 FORMAT (/ 10X, "INPUT DECK ECHO"/10X, 15("-")) 

我能想到的只有兩個理由使用霍爾瑞斯代碼:不打擾改變原有的源代碼(值得注意的是,當前的Fortran編譯器可以處理這個功能在30年前已經過時了!Fortran源代碼永遠不會死!),或者研究計算語言的歷史。這個名字是一位偉大的計算先驅,他的發明在一年內完成了1890年美國人口普查,1880年人口普查歷時8年:http://en.wikipedia.org/wiki/Herman_Hollerith

我很懷疑你會在第一列中看到「1」控制「今天。我不得不查看「1」是頁面彈出的代碼。你更有可能在你的輸出中看到它。見Are Fortran control characters (carriage control) still implemented in compilers?

+0

由於受到外部約束(不要問),我仍然經常編寫f77代碼(完成了'blockdata'和'equivalence' - 幸運的是沒有'entry'),我從來沒有見過Hollerith格式 – mgilson 2012-07-28 01:04:25

相關問題