1

Fortran 90 の外部ファイルから 2 次元配列 (30.7) を読み取ろうとしています。

READ(*,*)Fname

OPEN(UNIT=10, FILE=Fname, ACTION="READ")

   DO i=1,30

      READ(10,*)(indices(i,j),j=1,7)
  END DO

データには、空白として表される欠損値がいくつかあります。データを array に読み込むと、欠落しているデータ(,*)(indices(i,j))が割り当てられます。0.00この問題をどうやって乗り越えますか?以下にデータを添付します。

337.60,220.40,0.00,0.00,200.42,216.61,261.04
323.00,249.20,65.30,0.00,201.93,210.91,309.98
116.80,474.80,0.00,0.00,203.43,215.76,234.93
72.10,505.90,0.00,0.00,204.93,215.72,233.47
148.30,771.70,0.00,0.00,206.44,217.00,239.05
90.70,287.20,0.00,0.00,207.94,215.43,216.85
337.20,334.50,10.20,0.00,209.45,226.85,306.57
142.50,142.80,0.00,0.00,210.95,240.09,240.31
279.10,289.60,51.80,0.00,212.45,227.75,262.30
273.60,337.70,0.00,0.00,213.96,256.86,223.66
332.40,425.60,0.00,0.00,215.46,238.36,237.63
45.70,299.30,0.00,0.00,216.96,223.92,241.41
49.10,529.40,0.00,0.00,218.47,235.81,282.17
185.30,331.80,38.00,0.00,219.97,235.81,309.29
552.90,454.80,0.00,0.00,221.47,224.60,269.09
176.20,441.60,0.00,0.00,222.98,232.44,293.95
170.00, ,0.00, , , ,327.96
200.00, ,0.00, , , ,291.69
241.20,156.00,0.00,0.00,227.49,235.55,278.66
118.00,383.20,3.20,0.00,228.99,269.28,325.31
62.00,189.70,0.00,0.00,230.50,248.73,266.95
400.20,244.20,0.00,0.00,232.00,239.70,271.27
163.70,826.60,0.00,500.00,233.50,245.06,294.98
250.40,236.60,0.00,0.00,235.01,261.72,288.24
51.30,684.20,0.00,0.00,236.51,245.06,237.37
412.50,128.90,0.00,500.00,238.01,245.16,268.66
452.00, , , , , ,314.68
481.00,155.50,0.00,0.00,241.02,278.72,348.44
162.20,201.90,0.00,500.00,242.52,250.36,255.58
171.80,152.00,0.00,500.00,244.03,246.85,339.06
4

3 に答える 3

3

DO ループの前に、インデックス配列に一意の値を割り当てます。データ セットに存在しないことがわかっている値があります。例:

    indices = -99.
    DO J=1,30
        Read(1,*) indices(J,:)
    END DO

インデックスの欠損値は、ファイルを読み取った後も値 -99 のままです。その後、各列の -99 の数を数えることができます。

于 2011-07-20T07:05:34.393 に答える
0

namelistメソッドは、提供されていない値をスキップできますが、それは非常に特殊な形式です。それ以外の場合、提供されていない値をスキップし、空白がゼロとして解釈されないようにする場合は、独自の追加レベルの処理を提供する必要があります。数値入力でブランクをゼロとして解釈するのは、Fortranの方法です。基本的には自分でパーサーを書かなければならないと思います。行を文字列に読み込み、コンマ(または空白も?)を使用してサブ文字列に分割します。サブ文字列が空白の場合は、値を変更しないでください-それが必要ですか?それ以外の場合は、「内部」読み取りを使用して、文字列から数値に値を読み取ります。些細なことではありませんが、標準外のことをしたいのです。Fortranで提供される文字列組み込み関数に目を通すと、処理が簡単になります。

于 2011-07-18T19:04:43.877 に答える
-3

試してください: open(unit=10, file=... blank=blank)

それが機能するかどうかはわかりませんが、 blank="zero" は空白を0にリセットします...私のソリューションが反対のことをするとします;)

于 2015-02-26T21:32:12.283 に答える