f90读取.txt文件返回NaN

时间:2015-04-08 21:58:09

标签: arrays fortran nan fortran90 readfile

我正在尝试使用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语句,但代码对我来说似乎没问题。

我现在有点卡住了想法......有什么想法吗?

谢谢

2 个答案:

答案 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')

但是还有其他问题可能导致此问题(或其他类似问题)。