2013-03-15 67 views
-1

我有一個.dat文件,它有2列,列中列出的值。但是,條目之間存在隨機間距。兩列的長度相同(只是數據中的空白行)。(FORTRAN 90)I/O讀取/打印

我需要能夠閱讀這些,然後顯示它們。

謝謝!對於任何建議/幫助 喬

我試過簡單地使用只是OPEN,但只是得到一個I/O錯誤。

PROGRAM TEST1 


OPEN(2, FILE='grades.dat', ACCESS='DIRECT', FORM='FORMATTED') 

READ(2) X, Y 


END PROGRAM TEST1 
+0

請出示你做了什麼 – BBdev 2013-03-15 03:22:15

+0

@BBdev 謝謝你的回覆。我已經嘗試過10次不同的迭代,但基本上它們都與OPEN/PRINT或READ類似。我只需要從文件中獲取所有值。 – Joe 2013-03-15 03:33:49

+0

您沒有在您的READ命令中指定的格式。 READ(2,*)X,Y應該修復它。另外,閱讀文件後關閉文件以及解決已解決的問題是很好的舉止。 <3 – 2014-06-19 04:18:17

回答

0

該代碼將文件逐行讀入到字符串中。如果字符串非空白,對應於包含兩個數字而不是空白的行,則將其讀入下一個數組元素。假定數組已被聲明爲足夠大。這回答了你的問題了嗎?更好的設計會讀取文件以確定數字的數量,倒回文件並將數組分配到正確的大小,然後將文件讀入數組。

編輯:實際上,Fortran語言會自動跳過空白行,因此該解決方案可以更簡單:

program read_file 

use, intrinsic :: iso_fortran_env 

implicit none 

integer :: i, j, ReadCode 
real, dimension (100) :: x, y 

open (unit=2, file="grades.dat", access="sequential", form="formatted", status="old", action="read") 

i = 1 
ReadLoop: do 

    read (2, *, iostat=ReadCode) x (i), y (i) 

    if (ReadCode /= 0) then 
     if (ReadCode == iostat_end) then 
     exit ReadLoop 
     else 
     write (*, '(/ "Bad read: ", I0)') ReadCode 
     stop 
     end if 
    end if 

    i = i + 1 

end do ReadLoop 

do j=1,i-1 
    write (*, *) x(j), y(j) 
end do 

end program read_file 
+0

我只是試圖運行這個確切的代碼,並得到: 運行時錯誤F605:寫(CON) - 一個編輯描述符應爲CHARACTER – Joe 2013-03-15 04:26:43

+0

我對fortran非常非常新。我還沒有讀過如何提示數組。但是這段代碼看起來非常接近。 – Joe 2013-03-15 04:30:01

+0

我解決了這個問題,謝謝。 – Joe 2013-03-15 08:15:03