Mik*_*ike 10
一个稍微简单的write语句版本可能是:
write (1, '(1x, F, 3(",", F))') a(1), a(2), a(3), a(4)
Run Code Online (Sandbox Code Playgroud)
当然,这只适用于您的数据是数字或易于重复的情况.您可以将格式保留在电子表格程序中,也可以在此处更明确.
我也建议从csv_file模块FLIBS.Fortran可以很好地读取csv文件,但写入它们并不是很多.使用csv_file模块,你放了
use csv_file
Run Code Online (Sandbox Code Playgroud)
在函数/子例程的开头,然后使用以下命令调用它:
call csv_write(unit, value, advance)
Run Code Online (Sandbox Code Playgroud)
其中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
Run Code Online (Sandbox Code Playgroud)
输出:
1,2,3
4,5
如果你只是想使用write命令,我认为你必须这样做:
write(1,'(I1,A,I1,A,I1)') a(1),',',a(2),',',a(3)
write(1,'(I1,A,I1)') b(1),',',b(2)
Run Code Online (Sandbox Code Playgroud)
这是非常复杂的,并要求您知道您的值将具有的最大位数.
我强烈建议使用csv_file模块.它确实为我节省了数小时的挫折感.
小智 5
Intel 和 gfortran (5.5) 编译器识别:
write(unit,'(*(G0.6,:,","))')array or data structure
Run Code Online (Sandbox Code Playgroud)
它没有多余的空格,并且该行可以有超过 999 列。
要使用 F95 删除多余的空格,请首先写入字符缓冲区,然后使用您自己的 CSV_write 程序删除多余的空格,如下所示:
write(Buf,'(999(G21.6,:,","))')array or data structure
call CSV_write(unit,Buf)
Run Code Online (Sandbox Code Playgroud)
您还可以使用
write(Buf,*)array or data structure
call CSV_write(unit,Buf)
Run Code Online (Sandbox Code Playgroud)
其中 CSV_write 程序将 Buf 中的空格替换为“,”。这是有问题的,因为它不会分隔字符变量,除非有额外的空格(即“a”,“abc”是可以的)。