写数据列到文件(Fortran语言)(Write data to file in columns (

2019-07-31 01:24发布

我需要写一些数据的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

而现在的问题是要把它写在单独的列。

Answer 1:

您可以使用隐含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)


Answer 2:

这真的取决于你试图写入文件(例如,是否有一个循环或数组...内的标量)的数据。 你可以包括这在你的问题的说明?

如果您正试图标量多次对同一行的写然后尝试使用非前进式I / O,通过关键字参数advance="no"来写的语句,如

integer :: x

do x = 1,10
  write(*, fmt='(i4,1x)', advance="no") x
end do

但是,要知道有一个惊喜的非前进式I / O 。



Answer 3:

答案取决于你的答案克里斯的问题。 如果你想有一个单一的线,那么你将不得不使用非推进IO由克里斯描述。 没有这一点,多格式写的语句,你总是会得到多行。

此外,您可能会需要使用格式化的IO,而不是表式(*)的IO。 规则是宽松表式IO。 不同的编译器可能会产生不同的输出。 由于许多输出项,换行有可能输出线保持距离过长。

这里的格式,应该工作,如果你所有的变量都是实数:

write (4, '( *(2X, ES14.6) )', advance="no" )


Answer 4:

怎么样好老$编辑描述:

write(*, fmt='(i4,$)') x

记住你的循环后做一个写(*,*)...



文章来源: Write data to file in columns (Fortran)