在(1)的OPEN语句中的Fortran ::语法错误

时间:2016-08-01 05:41:03

标签: fortran

我试图通过[diehard tests](http://stat.fsu.edu/pub/diehard/)测试我的加密算法,我意识到我的输入文件必须是未格式化的直接访问文件。 所以我尝试在Fortran中编写一个简单的程序来读取文件并将其写入另一个文件。

首先,它是制作未格式化或直接访问文件的唯一方法吗?

如果是这样,我就有了这个错误

     open(unit=2, file='unf.BIN',RECL=rl , form='UNFORMATTED', access='direct')
                                                                 1

错误:(1)

中OPEN语句中的语法错误

我使用RECL是因为Open语句错误中缺少RECL参数。(Fortran 90, Compiling program: Error messages

这是我的Fortran代码:

    program BinaryWriter
    implicit none

    integer :: i
    integer :: p

    open(unit=1,file='encout')
    open(unit=2, file='unf.BIN',RECL=rl , form='UNFORMATTED', access='direct')

    do i=1 ,256
        read (8,'(i1)') p
        write(*,*) p
    end do

    close(1)
    close(2)

    end program BinaryWriter

1 个答案:

答案 0 :(得分:1)

两件事:

1)请停止使用小于10的单位数。几乎所有现代Fortran编译器现在都有newunit标识符,而不是旧的unit实际选择标识符一个未使用的值,所以总是在那里使用一个变量。但即使您想使用unit,也请将其设置为10或更高。

2)对于直接访问,程序需要记录长度。因此,如果您有access="direct",则还需要recl=<some integer value>来告诉编译器新记录的开始位置。

现在,在您的情况下,您在open语句中有一个RECL=rl条目,但我看不到rl是什么。它需要是一个正整数。

编辑添加:正如@IanH在您的问题下方的评论中指出的那样,您可能正在使用固定格式的fortran。这可能是由于源代码文件的文件扩展名为.f.f77引起的。在这种情况下,您必须手动换行:

      program dir
      implicit none
      integer :: rl

      open(unit=20, file='delme.bin', recl=<the record length>, 
     &     form='unformatted', access='direct')
      close(20)
      end program dir

请注意,&位于该行的第6个位置。 Fortran 77代码通常在那里使用+,但&也与较新的Fortran版本兼容,这就是我喜欢它的原因。 F77标准只是第6位中的任何角色。