我正在尝试将一些整数值写入文件。每个"列表"整数必须在同一行。这些值来自代码中的各种位置,因此代替
将所有值放入另一个数组中,我想我只需使用advance='NO'
设置一次输出一个。以下是相关的代码段:
open(unit=120,file=mesh_name,action='WRITE',iostat=io,status='REPLACE',recl=(nsp*9+10))
write(120,*) nTri,nNode,2,nEdgeBd
if (o > 1) then
do t = 1,nTri
write(120,'(i2,3i9)',advance = 'NO') o,tri(:,t)-1
en = triEdge(1,t)
write(120,'(i9)',advance = 'NO') (edgeA(i,en)-1, i=2,o)
en = triEdge(2,t)
write(120,'(i9)',advance = 'NO') (edgeA(i,en)-1, i=2,o)
en = triEdge(2,t)
write(120,'(i9)',advance = 'NO') (edgeA(i,en)-1, i=2,o)
if (o > 2) write(120,'(i9)',advance = 'NO') (triInt(i,t)-1, i=1,nIntNode)
write(120,*)
end do
当值的数量很小时,它会正确输出:
3984 8052 2 84
2 1443 1368 1431 2034 2035 2035
2 1358 1261 1290 2037 2038 2038
2 97 13 14 2040 2041 2041
2 1291 1272 1273 2043 2044 2044
但是,当每个列表变长时,输出如下:
3984 18054 2 84
3 1443 1368 1431 2034
2035 2036
2037 2036
2037 14070
3 1358 1261 1290 2040
2041 2042
2043 2042
2043 14071
3 97 13 14 2046
如您所见,我尝试使用recl
声明中的open
参数更改默认记录长度。
我正在使用gfortran 4.7.3。
所以我的问题是:我怎么不理解fortran如何处理io?