テキストファイルからレコードを読み取るための古い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を使用した3行目の暗黙的な読み取りにより、iが実際に読み取られたフィールドの数と等しくなるのに対し、gfortranでは常に65になることです。2番目の問題は、ifortを使用した同じ暗黙的な読み取りでのことです。 、 キャラクター ; 通常のフィールドとして読み取られますが、gfortranではスキップされます。
誰かが私がこれらの2つの問題を解決するのを手伝ってくれる?コードをまとめて置き換えるための他のアイデアも歓迎します。