0

F95/90 と IBM コンパイラを使用しています。ブロックから数値を抽出してファイルに書き込もうとしています。出力で理解できない奇妙なエラーに直面しています。プログラムを実行するたびに、'Beta' と 'END' の間のループをスキップします。値を読み取って保存しようとしています。アルファ ループとベータ ループ内の行数は固定されていません。したがって、単純な「do ループ」は役に立ちません。「do while」ループと「if-else」も試しましたが、それでも「ベータ」部分はスキップされます。

Alpha Singles Amplitudes
15      3    23      4   -0.186952
15      3    26      4    0.599918
15      3    31      4    0.105048
15      3    23      4    0.186952
Beta  Singles Amplitudes
15      3    23      4    0.186952
15      3    26      4   -0.599918
15      3    31      4   -0.105048
15      3    23      4   -0.186952
END `

簡単な短いコードは次のとおりです。

program test_read

   implicit none

      integer::nop,a,b,c,d,e,i,j,k,l,m,ios
      double precision::r,t,rr
      character::dummy*300
      character*15::du1,du2,du3
      open (unit=10, file="1.txt", status='old',form='formatted')

  100   read(10,'(a100)')dummy

        if (dummy(1:3)=='END') goto 200

        if(dummy(2:14)=='Alpha Singles') then
             i=0
  160       read(10,'(a4,i2,a6,i1,a4,i2,a6,i1,f12.6)')du1,b,du2,c,du3,d,du4,e,r              
            do while(du1.ne.' Bet') 
    write(*,'(a2,a4,i2,a6,i1,a4,i2,a6,i1,f12.6)')'AS',du1,b,du2,c,du3,d,du4,e,r
    goto 160
    end do                     

        elseif (dummy(2:14)=='Beta  Singles') then
  170       read(10,'(a4,i2,a6,i1,a4,i2,a6,i1,f12.6)')du1,b,du2,c,du3,d,du4,e,r
            if((du1=='END'))then
              stop
        else      

     write(*,'(a2,a4,i2,a6,i1,a4,i2,a6,i1,f12.6)')'BS',du1,b,du2,c,du3,d,du4,e,r             
            goto 170      
    end if
    end if
        goto 100      

   200    print*,'This is the end' 

  end program test_read
4

1 に答える 1