5

我正在为我正在做的一个生物学项目使用一些旧的 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”的消息。有什么建议吗?谢谢!

4

1 回答 1

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

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

于 2013-09-16T12:55:33.477 回答