Fortran Coder

从文本文件读取数据,写成特定的二进制文本格式

查看数: 8918 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2016-4-14 16:03

正文摘要:

问题:Fortran语言,从文本文件读取数据,写成二进制文本格式。需要写的二进制文件格式是有要求的,个人怎么写都不对,因为二进制文件存在保存格式问题,所以想求教怎么写出和需要的格式一模一样。非计算机专业,还 ...

回复

duzilinhan 发表于 2016-4-18 22:37:52
楚香饭 发表于 2016-4-16 07:13
除了 Compaq Visual Fortran,除了 Powerstation,除了 g77 ,除了 NPD Fortran ,除了这些已经死了的编译 ...

谢谢回答,非常感谢!!!!
楚香饭 发表于 2016-4-16 07:13:04
除了 Compaq Visual Fortran,除了 Powerstation,除了 g77 ,除了 NPD Fortran ,除了这些已经死了的编译器

但凡还在更新维护中的编译器,都可以使用。
duzilinhan 发表于 2016-4-15 23:16:26
楚香饭 发表于 2016-4-14 21:33
1. 这里没有学计算机专业的。
2. 你的数据文件格式还是比较简单的。
3. 对于二进制文件来说,有一种很方便 ...

Read( 16 , pos = 32+lngTDT*4+1 )
Inquire( 12 , Pos = i )
这种语句要在哪种版本才能使用?
duzilinhan 发表于 2016-4-14 21:52:15
楚香饭 发表于 2016-4-14 21:33
1. 这里没有学计算机专业的。
2. 你的数据文件格式还是比较简单的。
3. 对于二进制文件来说,有一种很方便 ...

谢谢你的回答,还没有运行,我将去学习你的代码和相关知识
楚香饭 发表于 2016-4-14 21:33:24
1. 这里没有学计算机专业的。
2. 你的数据文件格式还是比较简单的。
3. 对于二进制文件来说,有一种很方便的东西,叫 stream,本站有介绍文章
4. 我写了一个简单的代码,也做了注释,应该比较易懂。

[Fortran] syntaxhighlighter_viewsource syntaxhighlighter_copycode
Program www_fcode_cn    
  use ,  Intrinsic :: ISO_C_Binding
  Implicit None
  character(len=1)        :: yn     !//问询
  character(len=30)       :: myHead !//头部
  integer(kind=C_SHORT)   :: lngTDT !//数据大小
  Integer(kind=C_Int) , allocatable :: spcin(:) !//数据
  Character(len=1)    , allocatable :: tail(:)  !//尾部
  integer :: n !//大小
  Open( 16 , File = '6.dat'  , access="stream" , form="unformatted" )
  Open( 12 , File = 'ca.chn' , access="stream" , form="unformatted" )
  Open( 11 , File = '1.txt' )
  Inquire( 16 , size = n )    !//查询文件大小
  Read( 16 ) myHead , lngTDT  !//读前头部32字节
  n = n - 32 - lngTDT*4       !//算出尾部大小  
  If ( n > 0 ) then           !//如果有尾部  
    Allocate( tail(n) )       !//分配尾部  
    Read( 16 , pos = 32+lngTDT*4+1 ) tail !//读取尾部
  End If
  Write(*,*)'1024 CH ?(Y/N)'
  Read(*,*) yn
  If( YN == 'Y' .OR. YN == 'y' ) then
    LngTDT=1024
  Else
    LngTDT=4096
  EndIf
  Allocate( spcin(LngTDT) )   !//分配数据
  Write( 12 ) myHead , LngTDT !//写入头部32字节
  read(11,*)                  !//跳过第一行<<DATA>>
  read(11,*) spcin            !//读取数据
  write( 12 ) spcin           !//写入数据
  If(n>0) write(12) tail      !//写入尾部
  Deallocate( spcin )
  If(n>0) Deallocate( tail )
  close( 16 )
  close( 12 )
  close( 11 )
End Program www_fcode_cn

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

GMT+8, 2025-6-22 02:12

Powered by Tencent X3.4

© 2013-2025 Tencent

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