2016-08-10 12 views
0

このコードは、Fortranによって保存された数値を読み取るためのものです。そのデータには4800行と19列があります。txtファイルの読み込み中にエラーが発生しました:リスト入力のアイテムの不正な整数

このデータのヘッドはこの

 1   2 1.50000000  0.00000000    1   21   240   361   2   0   0   0   0   0   0   0   0   0   0 
     2   2 1.50000000  0.00000000    1   19   208   390   7   0   0   0   0   0   0   0   0   0   0 
     3   2 1.50000000  0.00000000    1   13   181   419   11   0   0   0   0   0   0   0   0   0   0 
     4   2 1.50000000  0.00000000    1   17   213   386   8   0   0   0   0   0   0   0   0   0   0 
     5   2 1.50000000  0.00000000    1   18   215   389   2   0   0   0   0   0   0   0   0   0   0 
     6   2 1.50000000  0.00000000    1   18   245   356   5   0   0   0   0   0   0   0   0   0   0 
     7   2 1.50000000  0.00000000    1   17   205   395   7   0   0   0   0   0   0   0   0   0   0 
     8   2 1.50000000  0.00000000    1   21   251   350   2   0   0   0   0   0   0   0   0   0   0 
     9   2 1.50000000  0.00000000    1   17   207   385   15   0   0   0   0   0   0   0   0   0   0 
     10   2 1.50000000  0.00000000    1   10   142   439   33   0   0   0   0   0   0   0   0   0   0 
     11   2 1.50000000  0.00000000    1   19   249   353   3   0   0   0   0   0   0   0   0   0   0 

列の名前のように見えますが、シム、感染、ベータ、イプシロンあります。他の15列の "countt"はシミュレーション結果です。私はこのコードを書いてF90のデータを読みました。私はこのコードを実行Whenver

program read 
    implicit none 
    integer, dimension(4800,15)::countt 
    integer :: i 
    integer ,dimension(4800)::sim, infected,id 
    real,dimension(4800):: epsilon, beta 

open(unit = 2, file = '/Dropbox/epi_data.txt', status = 'old', action = 'read') 
    do i = 1,4800 
read(2,*) sim(i), infected(i), beta(i), epsilon(i), countt(i,:) 

    print*, sim(i), infected(i), beta(i), epsilon(i), countt(i,:) 
end do 
    close(2) 

    end program read 

、私はこのエラーを取得する「Fortranのランタイムエラー:リスト入力 の項目3に悪い整数を」

私はここで何をしないのですか?

トレーニングセットを100で保存したい場合、私は他の問題があります。つまり、100行を保存して100をスキップし、100を保存して100をスキップし、行の最後までスキップします。 ? 私の4800rowsの終わりに、私は2400トレーニングセットを持っています。

この質問のデータをアップロードする必要がありますか?

+0

最新のFortran(2008+)コンパイラにアクセスできますか?もしそうなら、ファイル識別ユニットをハードコーディングするのではなく、 'newunit'指定子を使うことをお勧めします。 – jlokimlin

+0

10以下のユニット番号を使用することは危険です.11以上またはnewunitを使用してください。 –

+0

私はFortranに非常に新しいです(私はこの言語を4週間かけて試し始めました)が、あなたの提案を見ていきます。 – sxq2221

答えて

3

整数値(infectedinteger)の3番目の列を読み込もうとしています。しかし、1.50000000などは整数としてフォーマットされていません(実数です)。したがって、エラー。

おそらく列の順序や読み方を変更する必要があります。つまり、id(i),を削除します。

+0

Alexander Vogtありがとうございました 私が提案したものを修正しましたが、ここでコードを更新しましたが、まだ問題があります。 – sxq2221

+0

ありがとう@アレクサンダー。コードは最初のフィードバックに基づいて正常に動作します。 – sxq2221

0

* .txtファイルを再フォーマットする必要があります。

Fortranはドット "。"を使用します。 1.50000000などの小数点の区切りは「150000000」ではなく「1.5」です。

+0

あなたはそれが150000000を意味すると思わせる原因は何ですか? –

+0

テキストファイルはFortran自体を使用して保存されました。それが違いを生むかどうかはわかりません。ここに私のtxtファイル全体へのリンクがあります。 https://www.dropbox.com/s/e7ztzwlz6n25dyj/epi_data.txt?dl=0 – sxq2221

関連する問題