旧版 Fortran:Hollerith 编辑 Format 语句的描述符语法

Old fortran: Hollerith edit descriptor syntax for Format statement

我正在尝试对旧代码进行现代化改造(或至少使其更易于理解),但我已将 运行 转换为一种奇怪的格式,呃,FORMAT 语句。

具体来说,它是一个包含 Hollerith 常量的 FORMAT 语句(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 的出现所取代。我通常将它们用作字符之类的东西时理解它们,但用作FORMAT 让我很困惑。

此外,如果我将 15H ((... 更改为 15H ((...(即我删除一个 space),它将无法编译。事实上,即使我把代码改成这样,它也不会编译:

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

我希望它采用更正常的 (F77+) 格式。感谢您的帮助。

你拥有的实际上是 Hollerith edit descriptors,而不是 constants(这会出现在 DATA 或 CALL 语句中),尽管它们使用相同的语法。 F77 完全取代了 Hollerith 常数;它添加了字符文字编辑描述符作为(好得多!)更好的选择,但是 H 编辑描述符在 F95 之前一直保留在标准中(即使在那时一些编译器仍然接受它作为兼容性功能)。

在任何情况下,H 之前的数字采用 H 之后的字符数,没有任何其他分隔符;这就是为什么在 H 之后删除(或添加)一个字符会搞砸的原因。解析您的格式会将其分成这些部分

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

因此现代的等价物(为清楚起见带有可选空格)是

   nn FORMAT( '  ((C(I,J),J=1,', I3, '),(D(J),J=1,', I3, '),I=1,', I3 
     1,') text' )

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

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