7

.csvFortran コードを使用して読みたいファイルを出力として提供するソフトウェアを使用しています。.csvファイルの形式は次のとおりです。

balance for 1. Unit: kg N/ha
___________________________________________________________________________________________________________________________________________________________________________
,N Pools,,,,,Influx N,,,,,Efflux N
Day,iniSON,iniSIN,endSON,endSIN,dSoilN,Deposit,Fertilizer,Manure,Litter,Sum-In...(**20 parameters**)
___________________________________________________________________________________________________________________________________________________________________________
 1,5973.55,  20.20,5973.51,  20.23,  -0.00,   0.00,   0.00,   0.00,   0.00,   0.00,   0.00,   0.00,   0.00,   0.00,   0.00,   0.00,   0.00,  -0.00,   0.00
.........

私はそのような値を持つ365行を持っています。

最初の行を読むために、次を使用しました。

program od

implicit none
integer :: res
character(LEN=200) :: head1,head2,head3,head4,head5
open(10, file="Balance_N_1.csv",access='sequential',form="formatted",iostat=res)
open(9,file="out.txt")
read(10,fmt='(A)', iostat=res) head1,head2,head3,head4,head5
write(9,*) head1,head2,head3,head4,head5       

end program od

いくつかの値を使って計算を実行できるように、次のデータを読み取って行列に入れるにはどうすればよいですか?

4

1 に答える 1

9

あなたの質問を正しく読んだ場合、365 行のデータを含むファイルがあり、各行には 1 つの整数 (日番号) と 20 の実数があり、各行の値はカンマで区切られています。次のようにデータ配列を宣言できます。

real, dimension(365,20) :: data_array

および次のような整数変数

integer :: line_no

次に、ファイルの先頭にあるテキスト行を読んだり、スキップしたりしたら、次のように配列を読み取ることができます。

do ix = 1,365
    read(10,*) line_no, data_array(ix,:)
end do

*read ステートメントで forを使用することにより、リスト指向の入力を使用しています。これは、迅速かつ簡単ですが、多少制限があります。ただし、データ ファイルがクリーンで一貫性がある場合は、これで十分です。

リスト指示入力が機能しない場合は、次のような編集記述子を使用する必要があります (未テスト)

read(10,'(i4,20f9.4)') line_no, data_array(ix,:)
于 2013-06-26T16:57:51.073 に答える