如何将Fortran Output输出为CSV文件?

任何人都可以告诉我,我怎样才能以CSV格式输出Fortran程序的输出? 所以我可以在Excel中打开CSV文件来绘制数据。

我也推荐FLIBS的csv_file模块。 Fortran装备精良,可以读取csv文件,但不需要编写它们。 用csv_file模块,你把

use csv_file 

在你的函数/子程序的开头,然后用下面的方法调用它:

  call csv_write(unit, value, advance) 

其中unit =文件单元号,value =要写入的数组或标量值,advance = .true。 或者.false。 取决于你是否要前进到下一行。

示例程序:

  program write_csv use csv_file implicit none integer :: a(3), b(2) open(unit=1,file='test.txt',status='unknown') a = (/1,2,3/) b = (/4,5/) call csv_write(1,a,.true.) call csv_write(1,b,.true.) end program 

输出:

1,2,3

4,5

如果你只是想使用写命令,我认为你必须这样做:

  write(1,'(I1,A,I1,A,I1)') a(1),',',a(2),',',a(3) write(1,'(I1,A,I1)') b(1),',',b(2) 

这是非常复杂的,并要求你知道你的值的最大位数。

我强烈build议使用csv_file模块。 这无疑为我节省了许多小时的挫折。

写入语句的一个稍微简单的版本可能是:

 write (1, '(1x, F, 3(",", F))') a(1), a(2), a(3), a(4) 

当然,这只有在你的数据是数字或容易重复时才有效。 您可以将格式保留到电子表格程序中,或者在此处更加明确。

十秒钟的search引擎find我的FLIBS库,其中包括一个名为csv_file的模块,它将写出的string,标量和数组是CSV格式。

这是我正在使用的(使用G95):

 write(unit,'(999(G21.6,:,","))')array or data structure containing number or character variables 

英特尔编译器认识到

 write(unit,'(*(G0.6,:,","))')array or data structure 

没有多余的空白,行可以有999列以上。

要使用F95删除多余的空白,首先写入一个字符缓冲区,然后使用自己的CSV_write程序去除多余的空白,如下所示:

 write(Buf,'(999(G21.6,:,","))')array or data structure call CSV_write(unit,Buf) 

你也可以使用

 write(Buf,*)array or data structure call CSV_write(unit,Buf) 

你的CSV_write程序在Buf中用“,”replace空格。 这是有问题的,因为除非有额外的空格,否则不会分隔字符variables(即'a','abc'是OK)。