将数据写入列中的文件(Fortran)

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)

  • 虽然gfortan不支持<n>扩展,但它支持使用*来指定灵活数量的格式项.此功能是无限制格式项,是Fortran 2008标准的一部分. (3认同)