Fortran文件I / O 2D阵列

时间:2014-08-21 19:05:15

标签: io fortran

要读入程序的文件是.txt,称之为numbers.txt,格式为

75694
13265
98654

我希望将每个数字读入一个rank-2数组(因此数组形状为[3 5])。我的方法的问题似乎是推进到新的记录,而我对隐含的DO没有很好的理解:

program f3
  implicit none
  integer, dimension(3,5) :: arr
  integer :: i, j
  open(unit=15,file="numbers.txt")

  ! Only attempting one method at a time, so one will be commented.                                                                              

  !----- Method 1 - how to advance to next record? -----                                                                                         
  do i=1,3
     do j=1,5
        read(unit=15, fmt='(I1)', advance="no") arr(i,j)
     enddo
  enddo


  !----- Method 2 - get "end of file" error -----                                                                                                
  do i=1,3
     read(unit=15, fmt='(I1)', advance="no") (arr(i,j), j=1,5)
  enddo

  close(15)

  ! Best way to display 2D array?                                                                                                                 
  write(6,'(5I1)') ((arr(i,j), j=1,5), i=1,3)

end program f3

我希望能够使用do循环,暗示do循环或它们的组合只是为了更好地感受它们的操作,但是如果有一种“标准”方法来做到这一点我会喜欢知道。谢谢!

1 个答案:

答案 0 :(得分:4)

尝试替换此

  do i=1,3
     do j=1,5
        read(unit=15, fmt='(I1)', advance="no") arr(i,j)
     enddo
  enddo

用这个

  do i=1,3
        read(unit=15, fmt='(5I1)') arr(i,:)
  enddo

这应该让你去。

写作:

  do ix = 1,3
     write(*,'(5(i1,1x))') arr(ix,:)
  end do

是我可能采取的一种方法。