ale*_*lex 6 formatting file-io fortran fortran90
我需要在Fortran 90中将一些数据写入文件.我应该如何使用列WRITE (*,*) input分组的值?总是在每次通话后放一个,这就是问题所在.WRITEnew 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
Run Code Online (Sandbox Code Playgroud)
现在重点是将它写在不同的列中.
Hri*_*iev 13
您可以使用隐含的DO循环将值写为单个记录.比较以下两个例子:
integer :: i
do i=1,10
write(*,'(2I4)') i, 2*i
end do
Run Code Online (Sandbox Code Playgroud)
它产生:
1 2
2 4
3 6
...
Run Code Online (Sandbox Code Playgroud)
使用隐含的DO循环,它可以重写为:
integer :: i
write(*, '(10(2I4))') (i, 2*i, i=1,10)
Run Code Online (Sandbox Code Playgroud)
这个产生:
1 2 2 4 3 6 ...
Run Code Online (Sandbox Code Playgroud)
如果在编译时未修复元素数,则可以使用<n>扩展名(不支持gfortran):
write(*, '(<n>(2I4))') (i, 2*i, i=1,n)
Run Code Online (Sandbox Code Playgroud)
它(2I4)从变量的值中获取编辑描述符的重复次数n.在GNU Fortran中,您可以首先使用内部文件创建适当的编辑描述符:
character(len=20) :: myfmt
write(myfmt, '("(",I0,"(2I4))")') n
write(*, fmt=myfmt) (i, 2*i, i=1,n)
Run Code Online (Sandbox Code Playgroud)
当然,它也适用于列表定向输出(以格式输出*):
write(*, *) (i, 2*i, i=1,10)
Run Code Online (Sandbox Code Playgroud)