从文本文件中读取矩阵并打印出来

时间:2015-07-27 14:38:52

标签: arrays matrix fortran fortran90

我想从12行txt数字文件中写出一个3 x 4矩阵 我为同一个

编写了一个Fortran 90程序
program array
  implicit none

  integer, parameter :: I4B = selected_int_kind(4)
  integer (I4B), allocatable, dimension (:,:) :: arr
  integer (I4B) :: i

  open(unit=99, file='1.txt')
  open(unit=100, file='out.txt')

  Allocate (arr(3,4))

  do i=1, 12
    read(99,*)arr(3,4)
    write(100,*),arr(3,4)
  enddo

  close (99)

  deAllocate (arr)

  stop
endprogram array

但它发出了错误

At line 10 of file array.f90 (unit = 99, file = '1.txt')
Fortran runtime error: End of file

第10行是read(99,*)arr(3,4)

1 个答案:

答案 0 :(得分:0)

这是一个非常简单的数组实现。它使用的事实是第一个索引是变化最快的。所以我只是继续阅读,直到数组的所有12个元素都被填满。

然后,为了输出,我指定一种格式,它应该每行写3个值。

program readfile
    implicit none
    integer, dimension(:, :), allocatable :: arr
    open(unit=99, file='1.txt', action='READ', status='OLD')
    open(unit=100, file='out.txt', action='WRITE', status='NEW')
    allocate(arr(3, 4))
    read(99, *) arr
    write(100, '(3I4)') arr
    close(99)
    close(100)
end program readfile

如果要明确地执行此操作,则必须为每个读取的值独立计算两个索引:

program readfile
    implicit none
    integer, dimension(:, :), allocatable :: arr
    integer :: i, row, col
    open(unit=99, file='1.txt', action='READ', status='OLD')
    open(unit=100, file='out.txt', action='WRITE', status='NEW')
    allocate(arr(3, 4))

    ! Read the elements:
    do i = 1, 12
        row = mod(i-1, 3)+1
        col = (i-1) / 3 + 1
        read(99, *) arr(row, col)
    end do

    ! write the elements:
    do i = 1, 4
        write(100, '(3I4)') arr(:, i)
    end do
    close(99)
    close(100)
end program readfile

顺便说一下,你的代码:

do i = 1, 12
    read(99, *) arr(3, 4)
    write(100, *) arr(3, 4)
end do

只需12次从输入文件中读取一个数字,将其存储在数组的最后一个位置,然后将相同的数字写回输出文件。

此外,您的错误消息表明您已尝试读取文件末尾。您的1.txt不包含12行,或者您可能先读过其他内容,例如找出有多少元素。在这种情况下,您需要在开始阅读实际数字之前添加rewind(99)