Old fortran:Hollerith编辑Format语句的描述符语法

时间:2016-03-29 23:37:40

标签: fortran fortran77

我试图对旧代码进行现代化处理(或者至少让它更容易理解)但我已经遇到了一种奇怪的格式,用于{1 FORMAT语句。

具体来说,它是一个FORMAT语句,其中包含Hollerith常量(nH其中n是一个数字):

  FORMAT(15H  ((C(I,J),J=1,I3,12H),(D(J),J=1,I3, 6H),I=1,I3,')  te'        
 1,'xt'  ) 

这与语法突出显示混淆,因为它看起来有未闭合的括号。它使用这种格式语句编译得很好,但是关闭括号会导致编译错误(使用intel或gfortran编译器)。

据我了解,Hollerith常量是Fortran 66的一个生物,并且被Fortran 77中CHARACTER的出现所取代。我通常在用作类似角色的东西时理解它们,但用作{ {1}}让我困惑。

此外,如果我将FORMAT更改为15H ((...(即我删除了一个空格),则无法编译。事实上,即使我将代码更改为:

,它也不会编译
15H ((...

我希望这可以采用更正常的(F77 +)格式。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:5)

你所拥有的实际上是Hollerith 编辑描述符,而不是常量(可能出现在DATA或CALL语句中),尽管它们使用相同的语法。 F77彻底取代了霍勒瑞斯的常数;它添加了char-literal编辑描述符作为(更多!)更好的选择,但是H编辑描述符保留在标准中直到F95(甚至一些编译器仍然接受它作为兼容性功能)。

在任何情况下, go build -o $GOPATH/bin/<exe> $GOPATH/src/your/<pkg> 之前的数字都会在H之后获取该数量的字符,而没有任何其他分隔符;这就是为什么在H搞砸之后删除(或添加)一个字符的原因。解析您的格式将其分解为这些部分

H

因此是现代等价物(为清晰起见,可选空格)

15H  ((C(I,J),J=1,
I3,
12H),(D(J),J=1,
I3,
 6H),I=1,
I3,
')  te' 
'xt'

或者如果您愿意,可以在继续(包括parens)之后将该文本放在I / O语句而不是FORMAT标签中使用的CHARACTER值,变量或参数中,但是因为您必须将所有引号字符加倍将它们置于不太方便的CHARACTER值中。

你的一线版本可能没有编译,因为你使用的是固定格式,也许默认情况下,只有每个源代码行的前72个字符都是固定格式的,其中第一个6为语句号和连续指示符保留,只留下66,并且该语句是我的计数为71。实际上,您今天发现的任何编译器也接受自由格式,这允许更长的行,并且对于新代码也具有其他优点,但可能需要更改现有代码,有时需要进行大量更改。