我正在尝试使用fortran程序读取带有多个数组的.txt文件。
看起来程序正在查找文件,但它只返回NaN值...
!
INTEGER :: T, RH, i, j, ierror
!
REAL, DIMENSION(3,3) :: AFILE
!
LOGICAL :: dir_e
inquire(file='PSR_FAB.txt', exist=dir_e)
if ( dir_e ) then
print*, "dir exists!"
else
print*, 'nope'
end if
OPEN (UNIT = 1234 , FILE = 'PSR_FAB.txt', STATUS = 'OLD', ACTION = 'READ')
DO i=1,3
READ(1234,*, IOSTAT=ierror) (AFILE(i,j),j=1,3)
print*, (AFILE(i,j),j=1,3)
! if (ierror>0) then
! stop 'Error while reading from file. '
! elseif (ierror<0) then
! print* ,PSR_FILE
! stop 'Reached end of file. '
! endif
ENDDO
CLOSE(UNIT=1234)
!
T=2
RH=3
print*,AFILE(T,RH)
!
为了测试程序,我使用以下.txt文件:
1 2 3
4 5 6
7 8 9
此外,当我使用“ierror if test”时,会弹出“文件到达结束”,这意味着ierror&lt; 0,这意味着文件的结尾已到达。
起初我以为是因为它无法找到该文件,但是当我查询它时,它找到它没有问题......
正如我之前所说,AFILE在读取文件后仅包含NaN值。
我想知道问题是在.txt文件中还是在代码中。也许这是READ语句,但代码对我来说似乎没问题。
我现在有点卡住了想法......有什么想法吗?
谢谢
答案 0 :(得分:1)
我在Windows 2000上运行程序时遇到了类似的问题,但它在Windows 7机箱上工作正常。
在我的情况下,该应用程序是使用英特尔Fortran V11在Win7机器上构建的。此应用程序在Win7盒子上运行,但是当在Win2000盒子上运行时,它无法读取前两个条目。
尝试使用/arch:IA32
选项进行编译。这将使用X87指令集而不是SSE2增强指令。这会生成一个适用于两个平台的应用程序。
答案 1 :(得分:0)
PSR_FAB.txt
文件可能在不是文件开头的位置打开。如果没有为POSITION=
语句指定open
属性,则会占用文件位置ASIS
。我不确定导致ASIS
产生除文件开头之外的位置的条件是什么。
我建议在打开时指定文件重绕:
OPEN (UNIT = 1234 , FILE = 'PSR_FAB.txt', STATUS = 'OLD', &
ACTION = 'READ', POSITION = 'REWIND')
但是还有其他问题可能导致此问题(或其他类似问题)。