我是Fortran新手。我希望能够读取文本文件并将其内容保存在各个变量中。我发现了一个非常有用的Fortran教程(http://www.math.hawaii.edu/~hile/fortran/fort7.htm#read),我正试图遵循其中列出的一个例子。具体来说,我制作了一个名为data.txt的文本文件,其中包含以下文本:
1.23, 4.56, 7.89
11, 13, "Sally"
我已将此文本文件保存在当前目录中。然后,我创建了一个文件test.f90(也将其保存在我的当前目录中),其中包含以下代码:
PROGRAM test
IMPLICIT NONE
REAL :: x, y, z
INTEGER :: m, n
CHARACTER first*20
OPEN(UNIT = 7, FILE = "data.txt")
READ(7,*) x, y, z
READ(7,*) m, n, first
PRINT *, x
PRINT *, y
PRINT *, z
PRINT *, m
PRINT *, n
PRINT *, first
END PROGRAM test
我使用的是GNU Fortran编译器,我认为它至少包括Fortran95之前的功能。上面的代码似乎可以编译,至少在默认设置下是这样)。但当我运行生成的可执行文件时,我会收到以下错误消息:
At line 10 of file test.f90 (unit = 7, file = 'data.txt')
Fortran runtime error: End of file
第10行是读取(7,*)m,n,第一行。你能帮我看看我在上面的代码中做错了什么吗?
我可以重现您的准确错误消息和正确的输出。我在Windows上使用gfortran和记事本来创建数据文件
如果用行尾字符终止第二个数据行(按Enter键),程序将显示正确的输出;如果不终止它,它将在执行过程中显示错误。
基本上,运行时尝试读取一行,但在到达该行末尾之前遇到文件末尾字符。
当我使用您的示例程序和示例数据时,它成功了!祝贺输出为:
1.2300000
4.5599999
7.8899999
11
13
Sally
为了猜测它不适合您的可能原因,有时Fortran可执行文件可能对行结尾很敏感,要求操作系统使用正确的行终止符,包括数据文件的最后一行。相反,许多编辑器会静默地转换行尾。我经常在使用Microsoft程序编写的文件时遇到这个问题。
对于某些编译器来说,在数据的最后一行之后添加新行是很重要的。例如,gfortran是一个需要它的编译器,它非常符合逻辑。Sun(Oracle)编译器不需要这个。