Fortran I / O,首先读的是EOF?

时间:2013-03-10 13:19:51

标签: fortran fortran90 gfortran fortran77 fortran95

我正在尝试使用一些旧的FORTRAN代码和一些新的Java代码,这些代码可以在Windows(作为exe)中运行,但不能在OS X中运行。我尝试在eclipse中构建它并且我得到了

make: *** [all] Segmentation fault: 11

所以我去终端这样做,即使是不同的编译器,但结果仍然相同:

运行OS X 10.7.5和gfortran-4.2 使用标准的-c和-o命令

Program foo
open(unit = 1, file = 'variables.txt',IOSTAT= iost)
    write(*,*)iost
    read(1,*) P
    write(*,*)P
...
end program foo

程序手动构建,但输出为:

0
At line 13 of file Cubic42.f
Fortran runtime error: End of file

我也看到了这个错误:

list in: end of file
apparent state: unit 88 named variables
last format: list io
lately reading sequential formatted external IO
Abort

它显示IOSTAT返回0,表示文件好? 但它不会读取文件,即使我将单位#改为88,即使我将CR更改为mac,windows或unix。

这似乎只是输入/输出的问题,如果我硬编码变量,例如程序可以工作。

有关如何解决此问题的任何想法? 提前谢谢。

EDIT1 这是variables.txt文件

-9999
15.6
500
150.9
48.98
0.000

最后有一个回车符,如果我将-9999更改为正数

并不重要

EDIT2

我从目录中删除了文本文件,并将.f重新制作为:

program foo
   implicit none
    real a, b, c, d
   open(unit = 1, file = 'variables.2txt', action='write')
   write(1, *) -6666
   write(1, *) 6.15
    write(1, *) -321
    write(1, *) 5.16
   close(1)

    open(unit = 2, file = 'variables.2txt', action='read',form='FORMATTED')
    read(2, *) a
            write(*,*) a
    read(2, *) b
            write(*,*) b
    read(2, *) c
            write(*,*) c
    read(2, *) d
            write(*,*) d
    close(2)

end program foo

然后我编译了它。
输出是:

  -6666.000    
   6.150000    
  -321.0000    
   5.160000 

正如所料,但变量.ttxt无处可寻!我很困惑,请帮忙。

EDIT3 我找到了幻像文件。它位于/users/me/phantom.txt 所以问题是,如何将文件保存在与可执行文件相同的目录中?

1 个答案:

答案 0 :(得分:1)

我收到一条非常类似的错误消息

           0
At line 4 of file proba.f (unit = 1, file = 'variables.txt')

在Linux上使用文件variables.txt运行代码时,我根据旧的MAC约定明确地将行尾字符设置为^M(而不是Unix ^J })。所以,我想,这是一个EOL会议问题。您最终可能会尝试将两行写入文件并调查该文件,以便确定您的系统中需要哪种EOL约定gfortran:

program foo
  implicit none
  open(unit = 1, file = 'variables.txt', action='write')
  write(1, *) -9999
  write(1, *) 15.6
  close(1)
end program foo

另外,我绝对会选择更新的gfortran编译器(目前的版本是版本4.7.2)。