子程序和主程序彼此独立,想交换数据,可通过:a. 传递参数 b.使用 common,c. 使用 module(任选其一)
但你的问题,更好的方法是,先获得文件大小,分配以后再读取。不推荐你先用字符串读入,因为 1000 的字符串可能浪费,也可能不够。字符串100的长度也可能浪费,也可能不够。
以下代码使用了一个叫 GetFileN 的函数,这个函数已经写好了,你以后可以直接使用。(更多请参考:http://fcode.cn/code_gen-34-1.html)
[Fortran] 纯文本查看 复制代码 Module DFile_Mod
Implicit None
contains
Integer Function GetFileN( iFileUnit )
Implicit None
Integer , Intent( IN ) :: iFileUnit
character( Len = 1 ) :: cDummy
integer :: ierr
GetFileN = 0
Rewind( iFileUnit )
Do
Read( iFileUnit , * , ioStat = ierr ) cDummy
If( ierr /= 0 ) Exit
GetFileN = GetFileN + 1
End Do
Rewind( iFileUnit )
End Function GetFileN
End Module DFile_Mod
Program main
use DFile_Mod
Implicit none
Integer, Allocatable :: elem(:)
Integer :: N
Open (11, File='data.txt', Status='old')
N = GetFileN( 11 )
Allocate( elem(N) )
Call assem( 11 , elem )
Write (*, *) elem
Deallocate( elem )
Close( 11 )
contains
Subroutine assem( FILEID , elem )
Integer :: elem(:) , FILEID , i
Do i = 1, size(elem)
Read ( FILEID , * ) elem(i)
End Do
End Subroutine assem
End Program main |