我正在使用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编译器。
答案 0 :(得分:4)
您的文件是空的。
确保该目录中确实存在名为datos.txt
的文件。注意确切的名称。 datos.txt
只是datos
并不是一回事。
如果您之前尝试使用包含STATUS="replace"
的注释命令打开它,则旧文件将被替换。
因为文件是空的,所以你没有任何实用的东西。如果iostat
非零且您的值为-1
,那么正在读取的变量的值是未定义的。所以你的a
未定义。再次,因为你的文件是空的。
此外,您不能盲目地将end=3
放在代码中,因为您在Stack Overflow上的某处看到了它。你必须先了解它应该做什么。没有理由将iostat=
和end=
结合起来。 iostat
就足够了。