1

以下は、私が扱っているデータセットです。

    2             19.000000E-01  4.246377E+24  9000.0        100.0  106.0  1400.0
    2.601629E+4   1E+24          2.232456E+2   0.100000E+00
    0.000000E+00  0.20000E+00    1.000000E+00  5.169046E+4
    0.000000E+00  0.000000E+00   0.000000E+00

Gfortran を使用して、このテキスト データ セットの要素を左から右に読み取りたいと考えています。ただし、私のコードは上から下に読み取っています。さらに、すべての要素を読み取っているわけではありません。GFortran コードを左から右に読み取り、すべての要素を読み取る方法はありますか?

これが私のコードです:

  PROGRAM S1
  IMPLICIT NONE

  REAL :: col1
  REAL :: col2, col3
  REAL :: col4, col5
  REAL :: col6, col7
  INTEGER :: IOstatus=0



  open (unit = 1, file = "testing.txt", STATUS = "OLD")
  readloop: DO
  READ (1,*,IOSTAT=IOstatus) col1,col2,col3,col4,col5,col6,col7
  IF (IOstatus /=0) EXIT
  WRITE (*, *) col1,col2,col3,col4,col5,col6,col7
  END DO readloop
  END PROGRAM

ありがとう。私が提供できる他の情報があれば、私に知らせてください。

4

1 に答える 1

0

問題は、Fortran がレコードを行ごと (行ごと) に読み取ることです。列ごとに読むのは簡単ではありません。

これを実行すると、次の出力が得られます。

   2.00000000       1.89999998       4.24637708E+24   9000.00000       100.000000       106.000000       1400.00000
   26016.2891       1.00000001E+24   223.245605      0.100000001       0.00000000      0.200000003       1.00000000

Fortran は行ごとに読み取るため、最初の行、次に 2 番目の行、というようにすべてを読み取ろうとします。この場合、ループの最初の反復では、最初の行から 7 つの項目が読み取られます。2 回目の繰り返しでは、2 番目の行から 4 つの項目を読み取り、次に 3 番目の行から 3 つの項目を読み取りました。3 回目の繰り返しで残りを読み取ろうとしましたが、読み取る追加の項目がなかったため、READ失敗し、ループが終了しました。

列を読み取るには、多少の作業が必要です。最初のステップは、おそらく列変数を配列にすることです。レコード (行/行) を読み取って自分で解析するか、項目を 1 つずつ読み取って手動で列に並べ替える必要がある場合があります。

また、この投稿もチェックしてください。Fortran でデータ ファイルから列を読み取る

于 2013-07-24T14:38:04.157 に答える