我需要写一些数据的Fortran 90到文件我应该如何使用WRITE (*,*) input
到在列分组值是多少? WRITE
总是把一个new line
在每次通话后,这就是问题所在。
代码例如:
open (unit = 4, file = 'generated_trajectories1.dat', form='formatted')
do time_nr=0, N
write (4,*) dble(time_nr)*dt, initial_traj(time_nr)
end do
而现在的问题是要把它写在单独的列。
您可以使用隐含DO循环写值单记录。 比较下面两个例子:
integer :: i
do i=1,10
write(*,'(2I4)') i, 2*i
end do
它产生:
1 2
2 4
3 6
...
使用隐含的DO循环可以写成:
integer :: i
write(*, '(10(2I4))') (i, 2*i, i=1,10)
这其中产生的:
1 2 2 4 3 6 ...
如果元件的数目是不固定在编译时,既可以使用的<n>
延伸部(未由支持gfortran
):
write(*, '(<n>(2I4))') (i, 2*i, i=1,n)
它采用的重复次数(2I4)
从所述变量的值编辑描述符n
。 在GNU Fortran语言,你可以使用内部文件时首先创建相应的编辑描述:
character(len=20) :: myfmt
write(myfmt, '("(",I0,"(2I4))")') n
write(*, fmt=myfmt) (i, 2*i, i=1,n)
当然,它也可以与列表直接输出(即用的格式输出*
):
write(*, *) (i, 2*i, i=1,10)
这真的取决于你试图写入文件(例如,是否有一个循环或数组...内的标量)的数据。 你可以包括这在你的问题的说明?
如果您正试图标量多次对同一行的写然后尝试使用非前进式I / O,通过关键字参数advance="no"
来写的语句,如
integer :: x
do x = 1,10
write(*, fmt='(i4,1x)', advance="no") x
end do
但是,要知道有一个惊喜的非前进式I / O 。
答案取决于你的答案克里斯的问题。 如果你想有一个单一的线,那么你将不得不使用非推进IO由克里斯描述。 没有这一点,多格式写的语句,你总是会得到多行。
此外,您可能会需要使用格式化的IO,而不是表式(*)的IO。 规则是宽松表式IO。 不同的编译器可能会产生不同的输出。 由于许多输出项,换行有可能输出线保持距离过长。
这里的格式,应该工作,如果你所有的变量都是实数:
write (4, '( *(2X, ES14.6) )', advance="no" )