我有一个旧的 Fortran 程序,用于从文本文件中读取记录。记录格式如下:
record_type field1 field2 ... fieldN ;
这些记录可能分布在几行,字符 ; 表示记录已经结束。旧代码是:
2 read(data,"(a130)",end=3)line
shift=adrec(nbrec)-1
read(line,*,end=1)typrec(nbrec),(field(shift+i),i=1,65)
1 do
do j=shift+1,shift+i-1
k=index(field(j),';')
if(k .ne. 0)then
if(k .eq. 1)then
adrec(nbrec+1)=j
else
field(j)(k:)=''
adrec(nbrec+1)=j+1
endif
go to 2
endif
endo
read(data,"(a130)")line
read(line,*,end=1)(field(shift+i),i=1,65)
enddo
3 continue
此代码可与英特尔编译器 (ifort) 一起使用。使用 gfortran 它失败了!第一个问题是第三行的隐式读取,使用 ifort,使 i 等于实际读取的字段数,而在 gfortran 中它总是给出 65。第二个问题是在相同的隐式读取中,使用 ifort , 性格 ; 被读取为普通字段,但 gfortran 被跳过。
谁能帮我解决这两个问题?也欢迎任何其他将代码全部替换的想法。