本帖最后由 楚香饭 于 2017-10-30 12:53 编辑
你这种问题不太容易用二进制存储,因为每个 block 的文本头部都不一样长。
后面用二进制读取的时候,不知道读多少文本头部。
如果你非要转二进制,看下面代码的修改
[Fortran] 纯文本查看 复制代码 program jack01
implicit none
character(len = 66) buffer
integer :: num = 0
real(kind = 4) :: a, b
integer :: status = 0
integer i
integer, parameter :: lines = 18 !//文本只算18行
logical alive
inquire(file = 'new.txt',exist = alive)
if(.not.alive) then
write(*,*) "new.txt does not exist"
stop
end if
!打开输入输出文件
open(unit = 14, file = 'new.txt')
open(unit = 15, file = 't.bin', access = 'stream')!//stream是一个很霸道的二进制读写方式
CY: Do !//命名循环
!转存前面19行的内容
do i = 1, lines
read(14, fmt = "(A66)",iostat = status) buffer
if(status /= 0) exit CY
write(15) trim(buffer) !//trim一下以便减小尺寸
end do
read(14,*,iostat=status) num !//获得行数
if(status /= 0) exit CY
!转存实数部分的内容
do i = 1, num
read(14, *, iostat = status) a, b
if(status /= 0) exit CY
write(15) a, b
end do
End Do CY
close(12)
close(13)
end program jack01
|