Compaq Visual Fortran与gfortran FORMAT声明的区别

时间:2013-04-18 19:40:51

标签: fortran translate gfortran intel-fortran

我有一大块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做了不同的事情。

1 个答案:

答案 0 :(得分:0)

如果这是纸上练习,我被问及VAR1,VAR2和VAR3的值是多少,我会给出与gfortran相同的结果。

你说的真的很奇怪。我刚刚在PowerStation4,IVF7(CVF6.6之前和之后的版本)上尝试过它们,它们都给出与gfortran相同的结果。我也尝试过不同的单词对齐方式和不同的数据类型(与gfortran不合法,但你可以在较旧的编译器上执行此操作),它会得到相同的答案。

您确定它正在读取您认为正在阅读的文件。 powerstation和某些版本的cvf有8.3文件名问题。他们无法应对长文件名。