【问题标题】:write output on a text file in Fortran code在 Fortran 代码中将输出写入文本文件
【发布时间】:2019-04-29 14:12:48
【问题描述】:

我在 Fortran 中有一个矩阵 A(3,4),我想将它写在这样的文本文件中:

 A(1,1) A(2,1) A(3,1)
 A(1,2) A(2,2) A(3,2)
 A(1,3) A(2,3) A(3,3)
 A(1,4) A(2,4) A(3,4)

我使用下面的代码。它首先有两个问题,它被每个 i 覆盖并且它是按行写入的。我会很感激指导我解决它。谢谢

      do i=1,4
      open (unit=10,file="out.txt",action="write")
      write (10,*)  A(1,i) , A(2,i) , A(3,i) 
      close (10)

【问题讨论】:

  • 这只是矩阵的一小部分。我只是写这个例子。我的真实矩阵是 A(180,200,430) 。我只需要写一些元素。
  • 为什么每次循环都打开文件?否则无法从这个片段中分辨出任何东西 - 请显示一个完整的代码,其中包含您遇到的问题,并准确告诉我们错误消息是什么 - 这对您来说似乎很明显,但这是我们第一次看到这个!

标签: fortran output


【解决方案1】:

正如 Ian 所说,每个 i 都会覆盖您的文件,因为您的 open 语句位于循环内。 Fortran 正在为每个 i 重新打开文件。将 open 语句移到循环之前,使其只打开一次。

当然它是按行写入的,因为二维数组中的第一个索引是行索引。您可以根据需要切换索引。另一方面,根据您的第一个框,您似乎想要跨列的行。

你说你只需要写一些元素。只要它们位于连续块中,您就需要在 write 语句中使用 implied do loop。它更加简洁,您可以编写大块而无需专门输入大量变量。它看起来像这样:

open (unit=10,file="out.txt",action="write")
do i=1,4
   write (10,*)  (A(j,i), j=1,3)
end do
close (10)

同样,这会反转行和列,如果您想要传统的表示,请切换 i 和 j。

【讨论】:

  • 为什么我们想要隐含的(A(j,i) j=1,3) 而不是A(1:3,i)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 2013-11-25
  • 2016-09-10
  • 2016-07-13
  • 1970-01-01
相关资源
最近更新 更多