【问题标题】:read from text and write into binary从文本读取并写入二进制
【发布时间】:2019-09-10 14:26:40
【问题描述】:
  INTEGER,PARAMETER :: nlv=6
   INTEGER,DIMENSION(nlv) :: aa,bb,cc,dd,ee,ff,gg
   INTEGER::rec,irec

OPEN(50,FILE=test.txt',FORM='formatted',ACCESS='sequential',STATUS='old',ACTION='READ')

OPEN(60,FILE='test.bin',FORM='unformatted',ACCESS='direct',STATUS='unknown',recl=6*4,ACTION='WRITE')

DO K=1,6

  READ(50,76,err=97)aa(k),bb(k),cc(k),dd(k),ee(k),ff(k),gg(k)

76 格式(i2,1x,i5,1x,i6,1x,i5,1x,i5,1x,i5,1x,i5)

  END DO


  WRITE(60,rec=irec)dd

  irec=irec+1

97 WRITE(* *)ERROR FOUND while reading data

  WRITE(*,*)"End of file found"

  CLOSE (50)

【问题讨论】:

  • 整理你的代码,让我们更容易理解。确保它是minimal reproducible example。并准确告诉我们您收到了哪些错误消息。
  • 请解释我的问题
  • 如果有人知道答案,请回复。
  • @Deva 您应该首先努力整理您的问题。一半的代码被格式化为代码,另一半不是。但最重要的是,您不能只说“我也遇到错误”。您必须向我们提供错误消息。您必须准确描述您的问题。现在人们只是在猜测,这不是正确的做法。

标签: fortran


【解决方案1】:

我猜当您使用直接访问时,记录的大小必须与您正在写入的数据大小匹配或更大。您声称记录长度=6(以字节为单位?),但您正在写入 6*4bytes=24bytes。

【讨论】:

  • 几个编译器用字而不是字节来表示记录大小stackoverflow.com/questions/43898711/…
  • 是的,你是对的,看起来英特尔 FORTRAN 带有 4 字节,并且假设 byterecl 编译器选项为 1 字节。我使用gfortran(f95),对其进行测试,如果记录长度> 23,则编写工作。所以对于 gfortran 它是 1 个字节。
猜你喜欢
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多