我正在使用一些旧的fortran代码进行我正在做的生物学项目.我在这里发布相关的片段.这是一个名为"READCN"的子程序.程序MAXN中的Earllier设置为108.
OPEN ( UNIT = CNUNIT, FILE = CNFILE,
: STATUS = 'OLD', FORM = 'UNFORMATTED' )
READ ( CNUNIT ) N, BOX
IF ( N .GT. MAXN ) STOP ' N TOO LARGE '
READ ( CNUNIT ) ( RX(I), I = 1, N ), ( RY(I), I = 1, N )
CLOSE ( UNIT = CNUNIT )
RETURN
END
Run Code Online (Sandbox Code Playgroud)
我正在向程序输入一个名为"data.dat"的文件.这是文件:
10, 4
0.8147, 0.1576
0.9058, 0.9706
0.1270, 0.9572
0.9134, 0.4854
0.6324, 0.8003
0.0975, 0.1419
0.2785, 0.4218
0.5469, 0.9157
0.9575, 0.7922
0.9649, 0.9595
Run Code Online (Sandbox Code Playgroud)
尽管如此,我总是收到"N TOO LARGE"的消息.有什么建议?谢谢!
小智 5
不要打开未格式化,它会读取您的文件,就像它是二进制数据一样.以格式化打开,并使用"*"格式.另外,请勿在一行中阅读,因为您不会按预期顺序读取数据.
program bob
implicit none
integer cnunit, n, maxn, box, i
parameter(maxn=108, cnunit=10)
real rx(maxn), ry(maxn)
open(unit=cnunit, file='bob.txt', status='old', form='formatted')
read(cnunit, *) n, box
print *, 'n=', n, 'box=', box
if(n .gt. maxn) stop 'n too large'
do i=1, n
read(cnunit, *) rx(i), ry(i)
print *, rx(i), ry(i)
end do
close(unit=cnunit)
end
Run Code Online (Sandbox Code Playgroud)
或者,如果您无法更改代码,请更改输入文件以满足程序的需要.您提供的输入文件将无法工作:您需要二进制数据,采用编译器预期的格式(通常的,非便携式"记录大小"),数据必须按列方式提供,而不是按行方式提供.