file-io - 将数据按列写入文件(Fortran)

我需要在 Fortran 90 中将一些数据写入文件。我应该如何使用 WRITE (*,*) input 将值分组到 columns 中? 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)

https://stackoverflow.com/questions/12002620/

相关文章:

python - 从 lxml.objectify.ObjectifiedElement 中剥离 p

javascript - 谷歌图表显示金钱而​​不是百分比

javascript - 有没有办法使用 Moment.js 解析相对日期?

c++ - 在不改变缩进的情况下重新格式化 C++ 大括号?

postgresql - 在 PostgreSQL 中格式化 double

java - 将 4 位军用时间转换为标准 12 小时时间格式

c# - 将规范化的电话号码转换为用户友好的版本

django - 如何格式化 django 评论的表单字段?

.net - 如何将 NLog 的文件名设置为进程开始日期?

c# - 使用 C# 格式化字符串中的句子