我有一大段 Fortran 代码,我想用 gfortran 编译该代码。我以前没有使用过 Fortran。我不知道代码的具体规范是什么,但我发现它至少可以用 Compaq Visual Fortran 6.6 编译——所以我猜它是在它下面编写的。
一般的问题是:有没有自动 Compaq Visual Fortran 到 gfortran 的翻译器?我没有找到。
事实上,经过一些修复后,代码确实可以使用 gfortran 进行编译,但在运行时出现异常:它没有按预期读取输入文件。这是一个代码示例:
CHARACTER*6 VAR1
CHARACTER*1 VAR2
CHARACTER*3 VAR3
OPEN (UNIT=CHANNEL, FILE=FILENAME, STATUS='OLD')
READ(CHANNEL, 38)VAR1,VAR2,VAR3
38 FORMAT(15X,A6,7X,A1,14X,A3)
还有一个数据示例:
123456789012345------'1234567-'''''12345678901234---
.ABCDEF.GHI.JKLMNOPQR.STUVWX.YZABC.DEF.GHI.JKLM....P
123456789012345------1234567-12345678901234---
第一行是原始应用程序如何读取它,第三 - gfortran,第二 - 来自数据文件的行示例(1
-9
用于省略字符,-
用于读取,'
用于未提及的格式,.
在示例中而不是原始行中的空格)。
因此,结果将是:
Origanal: VAR1 == 'MNOPQR', VAR2 == 'Y', VAR3 == '..P' - correct
gfortran: VAR1 == 'MNOPQR', VAR2 == '.', VAR3 == 'JKL' - wrong
gfortran 非常简单:它跳过 15 个字符,读取 6 个字符,跳过 7 个字符,依此类推。但原来的应用程序是另一种方式,我猜不出它的逻辑。它仍然读取指定数量的字符,但跳得比指定的更远。它确实阅读了预期阅读的内容。
我尝试指定它们出现在输入文件 ( 15X,A6,8X,A1,19X,A3
) 中的确切长度,它适用于 gfortran,但这不是一个长期解决方案。
所以,我更具体的问题是:gfortran 和 Compaq Visual Fortran 6.6中的语句有什么不同吗?FORMAT
(也许,我的想法是错误的FORMAT
是原因)
UPD
我想,可能有一些东西可以分成单词左右。我的意思是 gfortran 只计算字符,但 CVF 做了一些不同的事情。