【问题标题】:How to resolve incorrect fortran read from data text file?如何解决从数据文本文件中读取的错误 fortran?
【发布时间】:2014-07-05 22:28:46
【问题描述】:

我有一个文本文件,同一行有两个数字

108  6.7522

我有一个 fortran 子例程 READCN,它将文本文件中的数字 108 6.7522 存储到变量 NN 和 BOX 中

    SUBROUTINE READCN ( CNFILE, BOX )
    CHARACTER   CNFILE*(*)
    REAL        BOX
    INTEGER     CNUNIT
    PARAMETER ( CNUNIT = 10 )
    INTEGER     NN
    OPEN ( UNIT = CNUNIT, FILE = CNFILE, STATUS = 'OLD',
 :         FORM = 'UNFORMATTED'                        )

    READ ( CNUNIT ) NN, BOX
    WRITE(*,*) NN, BOX
    CLOSE ( UNIT = CNUNIT )
    RETURN
    END

READCN 变量 NN BOX 的输出是

   3.2997999      2.74554597E-31

如何正确读取这些值?

本程序取自http://www.ccl.net/cca/software/SOURCES/FORTRAN/allen-tildesley-book/f.12

当我尝试删除读取命令中的格式选项时,这是我收到的后续错误

At line 686 of file MCNPT.f (unit = 10, file = 'LATTICE-256.txt')
Fortran runtime error: Missing format for FORMATTED data transfer

【问题讨论】:

  • “删除读取命令中的格式选项”是指“删除open 语句中的form='unformatted'”?

标签: file-io fortran


【解决方案1】:

从使用未格式化输入到格式化输入需要三个操作:

  • 将输入更改为“文本文件”;
  • 打开文件以进行格式化而不是未格式化的 I/O;
  • 为读取语句提供格式。

您已经完成了其中的前两个。 [如果你不知道,去掉form='unformatted'意味着使用格式化I/O的默认值。]

剩下的就是在随后的reads 中使用格式说明符。这就是编译器抱怨的地方。

使用最简单的格式化读取是list-directed,它由read 中的fmt=* 说明符给出。这对于您的情况应该足够了,但您应该确保您对它的局限性感到满意。

准确地说:替换

      OPEN ( UNIT = CNUNIT, FILE = CNFILE, STATUS = 'OLD',
     :         FORM = 'UNFORMATTED'                        )
      READ ( CNUNIT ) NN, BOX

      OPEN ( UNIT = CNUNIT, FILE = CNFILE, STATUS = 'OLD')
      READ ( CNUNIT, * ) NN, BOX

【讨论】:

  • 如何使用它来解决无法正确读取数字的问题?
  • 在文件 MCNPT.f 的第 687 行(单位 = 10,文件 = 'LATTICE-256.txt')Fortran 运行时错误:未格式化数据传输存在格式
  • 抱歉,需要对问题中的代码进行两次更改。我假设编辑暗示您已经将其应用于open
  • 不用担心,我认为它有效,我还有一个与此无关的错误要调试,但感谢您这么快回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 2013-06-23
  • 2012-06-10
  • 2019-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多