gpt4 book ai didi

fortran - 如何让 FORTRAN 77 读取输入?

转载 作者:行者123 更新时间:2023-12-04 19:08:21 25 4
gpt4 key购买 nike

我正在为我正在做的生物学项目使用一些旧的 fortran 代码。我在这里发布相关的片段。这是一个名为“READCN”的子程序。在程序中,MAXN 的早期设置为 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”的消息。有什么建议吗?谢谢!

最佳答案

不要以未格式化的方式打开,它会像读取二进制数据一样读取您的文件。改为按格式打开,并使用“*”格式。另外,不要在一行中阅读,因为您不会以预期的顺序读取数据。

  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

或者,如果您无法更改代码,则更改您的输入文件以适应您的程序的需要。您提供的输入文件根本不起作用:您需要二进制数据,采用编译器预期的格式(有通常的、不可移植的“记录大小”),并且数据必须按列提供,而不是按行提供.

关于fortran - 如何让 FORTRAN 77 读取输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18819018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com