无法从文本文件中读取数字

时间:2016-10-16 20:48:37

标签: fortran gfortran

我正在使用Fortran制作一个子程序,用于CFD浅水软件。

我已编写此代码以读取和使用存储的值。

PROGRAM hieto

! Calcula la precipitacion efectiva en funcion del tiempo
!IMPLICIT NONE

real::a

!Abrir CSV
!OPEN(UNIT=10,FILE="datos.txt",FORM="formatted",STATUS="replace",ACTION="readwrite",ACCESS='sequential')
open(unit=10, file='datos.txt')

!Leer el archivo
read(10, *, iostat=ios)a
print*,ios
print*, a
close (UNIT=10)

END PROGRAM hieto

我的文字文件datos,看起来像这样

1

2

3

当我按原样运行代码时,我得到以下输出

-1 
0.0000000000
Process return 0 (0x0) execution time: 0.002 s

第一行中的第一个数字是一个而不是零,所以我不知道为什么会发生这种情况。

如果我从read语句中删除iostat=ios,我会收到以下错误:

At ine 13 (the line od the read stament) of file /home/Dropbox/scripts_tesis/fortran/hieto_telemac.f90 (unit=10, file=datos.txt')
Fortran runtime error: end of file.
Proceess returned 2 (0x2)

我在这里已经阅读了一些答案,所以我尝试在read语句中添加end=3,并在结尾处用空行结束我的文本文件。 end=3给出一个错误,指出3不是已定义的标签,并且在文本文件中放置一个空白行没有任何作用。

我正在使用ubuntu 16.04 LTS和Gfortran编译器。

1 个答案:

答案 0 :(得分:4)

您的文件是空的。

确保该目录中确实存在名为datos.txt的文件。注意确切的名称。 datos.txt只是datos并不是一回事。

如果您之前尝试使用包含STATUS="replace"的注释命令打开它,则旧文件将被替换

因为文件是空的,所以你没有任何实用的东西。如果iostat非零且您的值为-1,那么正在读取的变量的值是未定义的。所以你的a未定义。再次,因为你的文件是空的。

此外,您不能盲目地将end=3放在代码中,因为您在Stack Overflow上的某处看到了它。你必须先了解它应该做什么。没有理由将iostat=end=结合起来。 iostat就足够了。