【问题标题】:Reading a CSV file of varying precision in Fortran在 Fortran 中读取不同精度的 CSV 文件
【发布时间】:2016-01-19 06:47:45
【问题描述】:

我正在使用外部程序运行模拟,该模拟返回给我一个包含输出数据的 csv 文件。我需要将此文件中的数据读入我的 fortran 程序,该程序分析和优化输入条件以重新运行外部程序。

CSV 文件有 20 列和 70 行。每列包含特定参数的输出数据。现在由于该程序不是我编写的,因此我无法控制输出值的精度。因此,在许多情况下,外部程序会截断小数点后的位数,因为它们为零。所以有可能在运行号 1 中,某个字段小数点后 3 位,而运行号 2 中只有小数点后 2 位。

我应该为此做些什么?我不能使用 read 命令,因为我需要提前指定我的程序必须读取的位数。

我的程序基本上需要一种方法来识别逗号之间的数据并读取逗号之间的值或不同的精度。

【问题讨论】:

  • 我需要提前指定我的程序必须读取的位数 并非总是如此。尝试 list-directed 输入,例如read(unit,*) c1, c2, c3, ...即使用*作为阅读格式。
  • 我不明白你的问题。你有任何错误信息或什么?代码和输入文件长什么样子?
  • @Mark,谢谢...是的,实际上最终做到了。不想因为种种原因。但不得不.. 谢谢!

标签: csv fortran gfortran data-analysis fortran95


【解决方案1】:

对于输入,格式说明符的小数部分仅在输入字段不包含小数点时使用

在过去的几十年中(自从打孔卡消亡以来),用户通常期望不包含小数点的数值是整数值。因此,对于输入,实数的格式规范应始终使用 .0 作为小数部分

例如,之后:

CHARACTER(4) :: input
REAL :: a, b
input = '1   '
READ (input, "(F4.0)") a
READ (input, "(F4.1)") b

a 的值为 1.0,b 的值为 0.1。

(对于输入,使用哪个特定的真实数据描述符(F、E、D 或 G)并不特别重要 - 无论输入的性质如何,它们的行为都相同。)

因此,对于输入,您只需要担心正确的字段宽度即可。将记录读入字符串后,使用 INDEX 内部函数就很容易做到这一点。

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 2012-11-15
    • 2013-06-23
    • 2016-10-21
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多