![](/img/trans.png)
[英]How to read in mixed data from a .csv into Fortran as string, integer, and real
[英]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.