Fortran 无法从文本文件中读取数字
我正在使用Fortran编写一个子程序,用于CFD浅水软件 我写这段代码是为了读取和使用存储的值Fortran 无法从文本文件中读取数字,fortran,gfortran,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='
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编译器。发生的情况是您的文件是空的 确保该目录中确实有一个名为
datos.txt
的文件。注意确切的名字datos.txt
和justdatos
不是一回事
如果您以前尝试使用包含STATUS=“replace”
的注释命令打开它,您的旧文件将被替换
因为文件是空的,所以你没有任何有用的东西。如果iostat
为非零,并且您的值为-1
,则正在读取的变量的值未定义。因此,您的a
未定义。同样,因为您的文件是空的
此外,您不能盲目地将
end=3
放在代码中,因为您在堆栈溢出的某个地方看到了它。你必须首先了解它应该做什么。没有理由合并iostat=
和end=
。iostat
就足够了。发生的情况是您的文件是空的
确保该目录中确实有一个名为datos.txt
的文件。注意确切的名字datos.txt
和justdatos
不是一回事
如果您以前尝试使用包含STATUS=“replace”
的注释命令打开它,您的旧文件将被替换
因为文件是空的,所以你没有任何有用的东西。如果iostat
为非零,并且您的值为-1
,则正在读取的变量的值未定义。因此,您的a
未定义。同样,因为您的文件是空的
此外,您不能盲目地将
end=3
放在代码中,因为您在堆栈溢出的某个地方看到了它。你必须首先了解它应该做什么。没有理由合并iostat=
和end=
。iostat
就足够了。谢谢您的回答,但我确实读过这篇文章,并使用了“如何读取到文件结尾”(EOF)?此Wiki Fortran()的一部分。我更改了代码以使其运行,但我以前曾尝试过此操作。感谢您的回答,但我确实阅读了此操作,并使用了“如何读取到文件结尾”(EOF)的方法?此Wiki Fortran()的一部分。我更改了代码以使其运行,但我以前曾尝试过这样做。看看我是如何编辑您的帖子的。用大写(大)I表示“I”。不要在逗号前加空格(,
)。用大写(大)字母开始句子。我很确定您的母语也有类似的规则。为了避免这些问题,请使用status='old'
,而不是status='replace
。这些是基本的文本编写规则。没有特别的投递规则。我相信你自己的语言有非常相似的规则。我喜欢使用INQUIRE(…EXIST=Prego),然后在逻辑Prego为.FALSE时抛出错误。但是STATUS='old'也有类似的规则。看看我是如何编辑你的文章的。用大写(大)I表示“I”。不要在逗号前加空格(,
)。用大写(大)字母开始句子。我很确定您的母语也有类似的规则。为了避免这些问题,请使用status='old'
,而不是status='replace
。这些是基本的文本编写规则。没有特别的投递规则。我相信您自己的语言有非常相似的规则。我喜欢使用INQUIRE(…EXIST=Prego),然后在逻辑Prego为.FALSE时抛出错误。然而STATUS='old'也有类似的规则。