我有一大块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
用于ommited chars,-
用于读取,{{ 1}}格式未提及,示例中的'
而不是原始行中的空格
所以,结果将是:
.
gfortran很简单:它跳过15个字符,读取6个字符,跳过7个字符,依此类推。但原始的应用程序是另一种方式,我无法猜测它的逻辑。它仍然读取指定数量的字符,但跳转比指定的更远。它确实阅读了预期阅读的内容。
我尝试指定输入文件(Origanal: VAR1 == 'MNOPQR', VAR2 == 'Y', VAR3 == '..P' - correct
gfortran: VAR1 == 'MNOPQR', VAR2 == '.', VAR3 == 'JKL' - wrong
)中显示的确切长度,它适用于gfortran,但它不是一个长期的解决方案。
所以,我更具体的问题是: gfortran和Compaq Visual Fortran 6.6中的15X,A6,8X,A1,19X,A3
语句是否有任何差异?(也许,我认为FORMAT
是错误的原因)
UPD
我猜,可能会出现分裂成单词的事情。我的意思是gfortran只计算角色,但CVF做了不同的事情。
答案 0 :(得分:0)
如果这是纸上练习,我被问及VAR1,VAR2和VAR3的值是多少,我会给出与gfortran相同的结果。
你说的真的很奇怪。我刚刚在PowerStation4,IVF7(CVF6.6之前和之后的版本)上尝试过它们,它们都给出与gfortran相同的结果。我也尝试过不同的单词对齐方式和不同的数据类型(与gfortran不合法,但你可以在较旧的编译器上执行此操作),它会得到相同的答案。
您确定它正在读取您认为正在阅读的文件。 powerstation和某些版本的cvf有8.3文件名问题。他们无法应对长文件名。