如何让FORTRAN 77读取输入?

时间:2013-09-16 00:49:44

标签: fortran fortran77

我正在使用一些旧的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”的消息。有什么建议?谢谢!

1 个答案:

答案 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

或者,如果您无法更改代码,请更改输入文件以满足程序的需要。您提供的输入文件将无法工作:您需要二进制数据,采用编译器预期的格式(通常的,非便携式“记录大小”),数据必须按列方式提供,而不是按行方式提供