2013-02-15 43 views
0

這應該是一個容易..我不明白爲什麼我的讀語句有語法錯誤。我有一個文件7477行長,我希望每個這些變量對應每行像我的格式指定。這裏的任何幫助都會很棒。謝謝!FORTRAN 90 - 輸入語法錯誤

implicit none 

integer :: spe, flen = 7477, i 
real, dimension (7477):: wnum,s,A,abh 
character :: other 
integer :: lun = 11 

write(*,*) 'Opening File!' 
open(lun,file ='h2o_allbands',status = 'old',action ='read') 
write(*,*) 'Success!' 


17 format (1x,i2,3x,F9.6,1x,E9.3,1x,E9.3,F5.5,A120) 

do i = 1, 7477 
    read(lun,17) spe(i),wnum(i),s(i),A(i),abh(i),other 
    write(*,*) wnum(i) 
end do 
+0

你有意將'other'設爲單個字符,還是'character *(LEN = 120)'。 – ja72 2013-02-17 07:46:00

回答

0

該讀取具有spe(i)作爲輸入列表項目。 spe未聲明爲數組,因此編譯器可能認爲spe(i)是對整數函數的引用。您不能將「轉換」爲純整數函數的結果。

也許spe應該聲明爲一個數組?

+0

得到它的工作..謝謝! – user2036115 2013-02-17 22:32:24

0

沒有從輸入文件看一條線,這是很難說確切的問題是什麼:但是:

  • 首先,你不應該使用一個format語句時閱讀實體(除非在特殊情況下),因爲這可能會導致各種不同的錯誤,如果您的線路出於任何原因格式不正確。所以,只是更換讀線:

    read(lun,*) spe(i), wnum(i), s(i), A(i), abh(i), other 
    
  • 如果所有的線分開的最後一個讀好,然後確保,你必須在最後一行的末尾換行符。

+0

嗯。我沒有看到這將如何工作,而不使用格式說明符。這是我的文本文件第一行的第一部分,包含我需要的數字。最後3個一起擠壓! 11 10.714931 2.528E-24 6.118E-06.0773.2324 – user2036115 2013-02-17 21:46:17

+0

如果輸入是固定格式,那麼明確的格式是一種更加穩健的方法。列表定向格式化有一些相當晦澀的特性,隨着時間的推移,許多特性(包括我自己)屢屢出現 - 最好是獲得一個錯誤,而不是讓您的程序默默地進行錯誤的輸入。即使是「自由格式」的東西,我也會避免在生產代碼中使用它 - 用戶可以在自己的代碼中閱讀和分析該行,這對用戶更友好。 – IanH 2013-02-17 21:59:42

+0

好的謝謝你的幫助! – user2036115 2013-02-17 22:31:05