【问题标题】:Unable to read a number from a text file无法从文本文件中读取数字
【发布时间】:2016-10-16 20:48:36
【问题描述】:

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

【问题讨论】:

  • 感谢您的回答,但我确实阅读了此内容,并使用如何阅读直到文件结尾 (EOF)?本 Wiki Fortran (fortranwiki.org/fortran/show/FAQ) 的一部分。我更改了代码以使其运行,但我之前曾尝试过。

标签: fortran gfortran


【解决方案1】:

你的文件是空的。

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

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

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

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

【讨论】:

  • 看看我是如何编辑你的帖子的。使用大写(大)I 表示“I”一词。不要在逗号前加空格 (,)。以大写(大)字母开头的句子。我很确定你的母语也有类似的规则。
  • 为了避免这些问题,请使用status='old',绝对不要使用status='replace'。
  • 这些是基本的文字书写规则。没有特别的发帖规则。我相信你自己的语言有非常相似的规则。
  • 我喜欢使用 INQUIRE(... EXIST=Prego),然后在逻辑 Prego 为 .FALSE. 时抛出错误,但 STATUS='old' 的作用类似。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2012-10-06
  • 1970-01-01
  • 2011-10-13
相关资源
最近更新 更多