簡體   English   中英

從fortran中的.csv文件中讀取數據

[英]Read data from a .csv file in fortran

我正在使用一個軟件,作為輸出一個.csv文件,我想借助一個fortran代碼閱讀。 .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

如何讀取后面的數據並將它們放在矩陣中以便我可以使用某些值執行計算?

如果我正確地讀了你的問題你有一個包含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語句中的格式,您使用的是列表導向的輸入,這種輸入既快速又簡單但有限。 但是,如果您的數據文件干凈且一致,則應該足夠好。

如果列表導向的輸入不起作用,你將不得不使用編輯描述符,類似這樣(未經測試)

read(10,'(i4,20f9.4)') line_no, data_array(ix,:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM