2011-06-24 201 views
6

我是Fortran新手。我希望能夠讀取文本文件並將其內容保存在各個變量中。我發現了一個非常有用的Fortran教程(http://www.math.hawaii.edu/~hile/fortran/fort7.htm#read),我試圖按照其中列出的一個示例。具體地說,我做了稱爲文本文件data.txt中用以下文字:在Fortran中逐行讀取以逗號分隔的文本文件

1.23, 4.56, 7.89 
11, 13, "Sally" 

我已經保存在我的當前目錄下這個文本文件。然後,我創建了一個文件test.f90(也節省了它在我的當前目錄)包含以下代碼:

PROGRAM test 
    IMPLICIT NONE 

    REAL :: x, y, z 
    INTEGER :: m, n 
    CHARACTER first*20 

    OPEN(UNIT = 7, FILE = "data.txt") 
    READ(7,*) x, y, z 
    READ(7,*) m, n, first 

    PRINT *, x 
    PRINT *, y 
    PRINT *, z 
    PRINT *, m 
    PRINT *, n 
    PRINT *, first 
END PROGRAM test 

我使用的GNU Fortran編譯,我覺得至少包括了功能包括Fortran95。上面的代碼似乎編譯好,至少使用默認設置)。但是當我運行生成的可執行文件,我得到這個錯誤消息:

At line 10 of file test.f90 (unit = 7, file = 'data.txt') 
Fortran runtime error: End of file 

線10的線READ(7 *)M,N,第一。你能幫我看看我在上面的代碼中做錯了什麼嗎?

+0

嘗試使用其他單元號(> 10)。也許你的編譯器使用單元7作爲預連接的設備。 – eriktous

+0

@eriktous:非常感謝你的時間,但不幸的是這並沒有解決問題(至少在我使用15單位時)。不過,謝謝你的建議。知道編譯器可以使用10或更少的單位來預連接的設備真的很好。我會牢記這一點。謝謝! – Andrew

回答

2

我可以重現您的確切錯誤消息和正確的輸出。我在Windows上使用gfortran,並使用記事本創建數據文件。
如果用行尾字符(按Enter鍵)終止第二條數據行,程序將顯示正確的輸出;如果你沒有終止它,它會在執行過程中顯示錯誤。

基本上,運行時會嘗試讀取一行,但在到達行尾時遇到文件結束字符。

3

當我的示例程序,與您的示例數據,它的工作!恭喜!輸出是:

1.2300000  
    4.5599999  
    7.8899999  
      11 
      13 
Sally 

猜測可能的原因是它不爲你工作,有時Fortran的可執行文件可以敏感地行結束符,要求正確的線路終端器的操作系統,包括最後一行一個數據文件。相反,許多編輯會默默轉換線路結尾。我通常會遇到由Microsoft程序編寫的文件的問題。

+0

我確實最初使用Microsoft編輯器創建了我的文本文件:Windows XP上的記事本。剛纔我已經創建了一個包含相同文本的新文本文件,但是這次使用XEmacs編寫,並使用單位值16而不是7或15.不幸的是,它仍然不會運行。出於好奇,你推薦什麼文本編輯器?另外,也許是因爲某些Fortran方言有一個「終結者角色」?例如,我知道在C中,每個文本文件都必須以「\ 0」或空指針結束,我想。 – Andrew

+0

XEmacs也有一些奇特的特徵。當我使用vi創建文本文件時,它會起作用,並且我得到的輸出與您的輸出完全相同。我正在使用GNU Fortran編譯器(gfortran);你也使用它嗎? – Andrew

+1

我在Mac OS X上使用gfortran。無論編輯器如何,可執行文件都希望操作系統的行結束符位於行尾,包括最後一行。正如@eriktous寫道,一定要使用Enter來獲得一個行終止符。 Microsoft程序經常使用錯誤的終止符,這也會導致不明顯的問題。 –

2

對於某些編譯器來說,在數據的最後一行之後添加一行是很重要的。例如gfortran是一個需要它的編譯器,它非常合乎邏輯。 Sun(Oracle)編譯器不需要它。

+0

這和我說的基本不一樣嗎? – eriktous

+0

是的。我在快速閱讀後沒有意識到這一點。我主要閱讀關於不同編輯的有點誤導性的討論。 –

相關問題