【问题标题】:Reading integers of unknown width in Fortran在 Fortran 中读取未知宽度的整数
【发布时间】:2017-10-04 07:57:37
【问题描述】:

我正在尝试读取这一行中的整数:

# 14 14 10

在 Fortran 2008 中。

我尝试使用此代码:

read(21, "(A, I,I,I)") garbage, a, b, c

但这不符合标准。 Intel Fortran 发出警告“Fortran 2008 does not allow this edit descriptor. [I]”和其他问题解释了这个问题:Nonnegative width required in format stringError: Nonnegative width required in format string at (1)

如何使用 Fortran 2008 正确读取未知宽度的整数?我不能简单地指定I2,因为我事先并不知道整数的宽度。

【问题讨论】:

  • 请为所有 Fortran quations 使用标签 fortran。此外,针对特定于版本的问题使用版本标签。 fortran95标签有什么原因吗?
  • 你不能只使用我,它不是 2008 特定的,在每个版本中都是如此。您可能只是要求严格的 Fortran 2008 合规性,即使您没有展示它。但这是真的。在过去的版本中也是如此。这是重复的,请用fortran标签重新标记问题。
  • 这是否意味着我需要提前知道Integer的宽度?
  • 对于副本我不得不不同意。标记的问题处理写语句。我想读取一个未知宽度的整数。
  • 是的。很多情况下可以使用列表定向读取read(21,*)

标签: fortran fortran2008


【解决方案1】:

正如我在 cmets 中所暗示的,您可以使用列表定向 I/O 轻松读取此类项目。然后编译器自己识别哪些字符属于输入列表中的每个项目并解析它们。这些项目可以用空格、逗号或换行符分隔。

read(21,*) garbage, a, b, c

这是以交互方式读取内容的最常见方式,但对于解析数据文件(CSV 和类似文件)中的列表也很有用。

如果输入记录中不存在一个数字(文本文件中的行),则读取将继续下一条记录。

【讨论】:

  • 你应该注意garbage必须被声明为一个字符串才能工作。
  • 我认为是这种情况,因为它在问题中有a 描述符。
猜你喜欢
  • 1970-01-01
  • 2021-09-14
  • 2016-06-22
  • 2017-10-30
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 2015-02-17
  • 2011-11-10
相关资源
最近更新 更多