【问题标题】:Read data from a .csv file in fortran在 fortran 中从 .csv 文件中读取数据
【发布时间】:2013-06-23 19:15:11
【问题描述】:

我正在使用一个软件,它给我一个.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

如何读取随后的数据并将它们放入矩阵中,以便我可以使用某些值执行计算?

【问题讨论】:

  • @Oddie,请把它放在问题中,而不是评论。

标签: csv fortran


【解决方案1】:

如果我没看错你的问题,你有一个包含 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

通过在您的阅读语句中使用* 格式,您正在使用list-directed 输入,这种输入既快速又简单,但有些受限。但是,如果您的数据文件干净且一致,这应该足够了。

如果列表导向输入不起作用,您将不得不使用编辑描述符,类似这样(未经测试)

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

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 2014-01-07
    • 2019-09-17
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 2019-05-03
    相关资源
    最近更新 更多