【问题标题】:How can I read a 2D file which content is not separated by spaces in Fortran如何在 Fortran 中读取内容未用空格分隔的 2D 文件
【发布时间】:2019-08-24 04:50:20
【问题描述】:

我有一个矩阵存储在一个文件 (number.txt) 中,如下所示:

12323456  
54254311  
76534522  

我怎样才能在 Fortran 中读取这样的矩阵,所以结果是:

1 2 3 2 3 4 5 6  
5 4 2 5 4 3 1 1  
7 6 5 3 4 5 2 2  

使用 awk 将这些列分开并在 Fortran 中读取非常容易。但是,我想知道我是否可以只使用 Fortran 来完成所有这些工作。完成后,我需要通过它的转置来倍增这个矩阵。

【问题讨论】:

  • 这不是一个如何编程的网站,所以这个问题在这里真的不合适,所以我投票关闭。然而,一个想法是将每一行读入一个字符变量并使用开始和结束索引访问每个字符(类似于数组)。示例:read(42,*) MyLine MyLine(1:1) 将包含字符“1”。
  • 这不是一个如何编程的网站,所以这个问题在这里真的不合适,所以我投票关闭。但是, @DanSp。下定决心,投票结束并在评论中回答问题是让新手相信这个一个可以回答此类问题的网站的可靠方法。

标签: fortran gfortran fortran90


【解决方案1】:

Fortran 格式的输入和输出基于字段。字段不需要用空格分隔。在这里,您可以将数据12323456 视为宽度为 8 的单个字段或宽度为 1 的 8 个字段(或其他组合)。

如果要从宽度为 1 的整数字段中读取值,格式项 I1 将允许读取该值。如果您有八个相邻的宽度为 1 的整数字段,8I1 将允许读取这些字段。

implicit none
character(8) :: input(3)=['12323456','54254311','76534522']
integer i, values(8)

do i=1,3
  read(input(i),'(8I1)') values
  print '(8(I1,:,1X))', values
end do

end

【讨论】:

  • 由于整数字段的数量存储在一个变量中,我只需要创建一个格式字符串:write(form, "(A,I0,A)") "(", ncols, "I1 )”。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多