读取语句中的 Fortran 格式字符串

问题描述 投票:0回答:2

我无法让格式字符串被 Fortran 程序中的读取语句接受,由 gfortran 在 OS X 下编译。

读取语句和字符串构成两行代码,我收到的各种错误消息似乎取决于这两个语句如何并行使用(加上,以防万一,要读入的数组的声明):

read(10, format) ( velmatt(n,row,i),m=1,3 )

format = "(11x,' x   ',a3,2x,i8,6x,3f11.6)"

这导致错误,

Fortran runtime error: Missing initial left parenthesis in format

我必须补充一点,我还尝试了一些格式语句的替代语法,它是由读取函数调用的,因为推荐的确切形式似乎有所不同(我是 fortran 的新手)。这里有一些选择,

read(10, 11) ( velmatt(n,row,i),m=1,3 )

11 format(11x,' x   ',a3,2x,i8,6x,3f11.6)

甚至

read(10, 'format') ( velmatt(n,row,i),m=1,3 )

format = (11x,' x   ',a3,2x,i8,6x,3f11.6)

至少其中一个给出错误

Fortran runtime error: Constant string in input format

而且两者之一也给出了这个错误,

Missing format label at (1) 

我读到格式声明应该是用引号括起来的括号,但在那种情况下,我的第一种方法应该有效吗?因此,错误消息似乎是相互补充的,而且我还缺少其他东西..

(我还不清楚在 fortran 中使用正确单位编号的重要性,如果这是部分或全部问题,我很抱歉)

无论如何,以上都不能满足编译器的要求(可能还有我尝试过的更多)。

fortran format
2个回答
3
投票

在您发布的示例中,只有带有

的示例
read (10,11)

是正确的。首先,您要求 READ 在名为 FORMAT 的变量中查找格式,我假设您之前将其声明为 CHARACTER。如果您首先指定了格式,它可能会起作用,但这不是推荐的方法。但事实上,变量未初始化并且没有正确的值。

您可以像在 (10,11) 案例中那样使用带标签的格式,也可以像这样将格式本身放入 READ 中:

read(10, "(11x,' x   ',a3,2x,i8,6x,3f11.6)") ...

0
投票

以下语句中斜杠对阅读说明的影响是什么:

  read(5,1111) (SSTORE(j,k),k=1,21)

1111格式(/21f6.0)

我理解是读一行然后跳下一行。

© www.soinside.com 2019 - 2024. All rights reserved.