Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 无法从文本文件中读取数字_Fortran_Gfortran - Fatal编程技术网

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

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='

我正在使用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编译器。

发生的情况是您的文件是空的

确保该目录中确实有一个名为
datos.txt
的文件。注意确切的名字
datos.txt
和just
datos
不是一回事

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

因为文件是空的,所以你没有任何有用的东西。如果
iostat
为非零,并且您的值为
-1
,则正在读取的变量的值未定义。因此,您的
a
未定义。同样,因为您的文件是空的


此外,您不能盲目地将
end=3
放在代码中,因为您在堆栈溢出的某个地方看到了它。你必须首先了解它应该做什么。没有理由合并
iostat=
end=
iostat
就足够了。

发生的情况是您的文件是空的

确保该目录中确实有一个名为
datos.txt
的文件。注意确切的名字
datos.txt
和just
datos
不是一回事

如果您以前尝试使用包含
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'也有类似的规则。