我正在使用一些旧的fortran代码进行我正在做的生物学项目。我在这里发布相关的片段。这是一个名为“READCN”的子程序。程序MAXN中的Earll设置为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
我正在向程序输入一个名为“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
尽管如此,我总是收到“N TOO LARGE”的消息。有什么建议?谢谢!
答案 0 :(得分: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
或者,如果您无法更改代码,请更改输入文件以满足程序的需要。您提供的输入文件将无法工作:您需要二进制数据,采用编译器预期的格式(通常的,非便携式“记录大小”),数据必须按列方式提供,而不是按行方式提供