如何从数据文本文件中解析不正确的fortran读取?

时间:2014-05-17 14:56:42

标签: file-io fortran

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

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

当我尝试删除read命令中的format选项时,这是我收到的跟随错误

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

1 个答案:

答案 0 :(得分:3)

从使用无格式输入转换为格式化输入需要三个操作:

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

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

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

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

准确地说:替换

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

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