5

我编写了以下块以从外部数据文件中读取:

     open(unit=338,file='bounnodes.dat',form='formatted') 
      DO I=1,NQBOUN
         DO J=1,NUMBOUNNODES(I)
            read(338,2001) NODEBOUN(i,j)
            write(6,*) 'BOUNDARY NODES',  NODEBOUN(i,j)
         ENDDO
       ENDDO
     2001
     FORMAT(32I5)

据我了解,这应该从bounnodes.dat. 但是,我在读取过程中遇到错误end-of-file,它会打印第一列。

我尝试使用相同的代码读取 32 x 2 数组,它读取第一列的 32 个元素,但输出0s下一列。

你能解释一下发生了什么吗?我的格式错了吗?

4

1 回答 1

7

Fortran 中的每个读取语句都会前进到下一条记录。这意味着普通文本文件中的新行。尝试这个:

   DO I=1,NQBOUN
     DO J=1,NUMBOUNNODES(I)
        read(338,2001,advance='no') NODEBOUN(i,j)
        write(*,*) 'BOUNDARY NODES',  NODEBOUN(i,j)
     ENDDO
     read(338,*)
   ENDDO

其中 NQBOUN 是行数,NUMBOUNNODES(I) 是一行中的列数。(我有各种问题,什么是 32x2 与 2x32)

您可以使用隐含的 do 使其更短

   DO I=1,NQBOUN
        read(338,2001) ( NODEBOUN(i,j) , j=1,NUMBOUNNODES(I) )
        write(*,*) ( 'BOUNDARY NODES', NODEBOUN(i,j) , j=1,NUMBOUNNODES(I) )
   ENDDO

甚至

   DO I=1,NQBOUN
        read(338,2001) NODEBOUN(i,:)
        write(*,*) 'BOUNDARY NODES',  NODEBOUN(i,1:NUMBOUNNODES(I))
   ENDDO

所有这些都使用 Fortran 90 功能。

于 2012-11-29T11:28:35.187 回答