【发布时间】:2012-05-11 09:09:23
【问题描述】:
我有一个旧的 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 被跳过。
谁能帮我解决这两个问题?也欢迎任何其他将代码全部替换的想法。
【问题讨论】:
-
替换代码的好主意取决于更清楚地了解您正在阅读的数据类型。我猜 record_type 是某种代码(整数?字符?),字段是实数吗?整数?混合物 ? record_type 是否决定了记录中的字段类型和字段个数?
-
record_type 和字段都是字符(character*20 typrec(mxrecord), field(mxfield))。之后根据记录的类型通过 read(field(i),*)var 处理它们。因此,var 是实数、整数或字符,具体取决于 i 对于此类记录的含义。
标签: fortran gfortran intel-fortran