我想从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)
。
答案 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)
。