【问题标题】:Reading integers from file into array? [duplicate]将整数从文件读入数组? [复制]
【发布时间】:2017-03-31 16:45:32
【问题描述】:

这里尝试将文件中的 10 个空格分隔的整数值读取到数组中:

subroutine ReadFileIntoArray (filename, int_array)
    implicit none

    character(len = *), intent (in) :: filename
    integer, dimension(:), intent(in out) :: int_array

    integer :: current_index

    open (1, file = filename, status = 'old')

    do current_index = 1, 10, 1
        read(1, *) int_array(current_index)
    end do

    close (1)
end subroutine ReadFileIntoArray

! ---------------------------------------------------------------------- !

program ReadFileCalculateAverage
    implicit none

    integer, dimension(10) :: int_array
    character (len = 9) :: filename = 'makrs.txt'

    call ReadFileIntoArray(filename, int_array) ! <--- error line

end program ReadFileCalculateAverage

我遇到的错误 (在 Windows 10 上使用 Code::Blocks 16.01) 是:

Error: explicit interface required for 'ReadFileIntoArray' : assumed-shape argument

考虑到我对 Fortran 的了解有限,有什么方法可以更正上述代码?是否还有其他需要纠正的重大(仍未观察到的)错误?

【问题讨论】:

  • 对所有 Fortran 问题使用标签 fortran 以获得更多关注。如果您的问题是特定的(这个不是),则为特定版本添加标签。
  • 另外,如果您这样做或其他人重新标记了它,我可以轻松地结束这个问题。现在我不能... Se 也 stackoverflow.com/questions/42766530/… 完全是重复的。
  • @VladimirF 好的,我明白了。谢谢!

标签: arrays file-io fortran


【解决方案1】:

您最终将需要一个非 1 的单元编号来进行打开和读取。也许 21 或使用 NEW UNIT。

对于 FileName 我通常在任何地方都使用 LEN=256,然后在打开时使用

INTEGER :: LUN
...
OPEN(NEWUNIT=LUN, FileName(1:LEN_TRIM(FileName)) )

另一种选择是在带有子例程的模块中声明 FileName,并且不要传递它

MODULE AA
IMPLICIT NONE
CHARACTER(LEN=256), PUBLIC :: FileName
CONTAINS
subroutine readarray(array)
...
ENDMODULE AA

或者给*一些东西

SUBROUTINE readarray(FileName,array,lenF)
iNTEGER,INTENT(IN   )           :: LenF
CHARACTER(LEN=LenF), INTENT(IN) :: FileName 

【讨论】:

  • 是的,模块有帮助,但错误与文件名无关,与整数数组有关。
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2016-10-01
  • 1970-01-01
  • 2023-03-04
  • 2014-04-08
  • 2015-11-23
相关资源
最近更新 更多