我试图通过[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
答案 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位中的任何角色。