如何将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)。