Fortran Coder

楼主: 肖邦的SK
打印 上一主题 下一主题

[文件读写] 将文本文件转化为二进制文件,然后再转出来

[复制链接]

716

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
624 元
贡献
319 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

板凳
发表于 2017-10-30 12:46:27 | 只看该作者
本帖最后由 楚香饭 于 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

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

沙发
发表于 2017-10-30 12:34:37 | 只看该作者
为啥不能先把所有的txt文件打包成单个zip、gz格式的压缩文件,然后按照规则抽取需要的txt文件呢?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-6-28 19:10

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表