xeb*_*btl 2 io fortran binaryfiles
我的程序在Fortran中读取"未格式化"的文件.除此之外,这个文件包含一个我的程序不需要的数组,但是它可以变得非常大.我想跳过这个数组.
如果这是编写数据的程序:
program write
real :: useless(10), useful=42
open(123, file='foo', form='unformatted')
write(123) size(useless)
write(123) useless
write(123) useful
end program write
Run Code Online (Sandbox Code Playgroud)
然后这适用于阅读:
program read
integer :: n
real, allocatable :: useless(:)
real :: useful
open(123, file='foo', form='unformatted')
read(123) n
allocate(useless(n))
read(123) useless
read(123) useful
print*, useful
end program read
Run Code Online (Sandbox Code Playgroud)
但我想避免分配"无用"数组.我发现了这个
program read2
integer :: n, i
real :: useless
real :: useful
open(123, file='foo', form='unformatted')
read(123) n
do i=1,n
read(123) useless
end do
read(123) useful
print*, useful
end program read2
Run Code Online (Sandbox Code Playgroud)
不起作用(因为记录长度被写入文件 [编辑,请参阅francescalus'答案]).
不能更改文件的格式.
读取比记录中更少的文件存储单元并不是罪过.
program read
real :: useful
open(123, file='foo', form='unformatted')
read(123)
read(123)
read(123) useful
print*, useful
end program read
Run Code Online (Sandbox Code Playgroud)
每个"空"读取仍会提前连接以进行顺序访问的文件的记录.
作为进一步评论:第二次尝试不会因"记录长度"而失败.由于尝试读取单独的记录,它失败了.在许多SO帖子中可以找到这种差异的重要性的例子.