Fortran Coder

查看: 19963|回复: 9
打印 上一主题 下一主题

[文件读写] Fortran读取规则数组的固定行列

[复制链接]

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2018-1-27 11:38:17 | 显示全部楼层
[Fortran] 纯文本查看 复制代码
Program fcode_cn
  Implicit None
  Integer , parameter :: NFROM = 9425 , NTO = 9459 , NCOL=13 !//用常数定义可以减少以后的修改量
  Integer , parameter :: N = NTO-NFROM+1
  Integer :: a(N,NCOL) , i
  Open(10,File="D:\pre2011-5.txt")
  Do i = 1 , NFROM-1 !//先跳过(空读)前 NFROM-1 行
    read(10,*)
  End Do
  Do i = 1 , N !//读取N行
    read(10,*) a(i,:)
  End Do
End Program fcode_cn

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2018-1-27 12:17:02 | 显示全部楼层
读到内存里就没有格式了。内存里是二进制(无格式的)
你只有在输出的时候,再重新指定格式。

或者你就直接读成字符串,这样就可以保留原有格式了。

知识补充:有格式的数字,是给人看的,但是计算机不能计算(比如加减乘除)。计算机只能计算无格式的二进制。

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

板凳
发表于 2018-1-27 16:52:18 | 显示全部楼层
关于格式输出,你可以看彭国伦书,第四章第四节。

以下为范例,希望你弄清楚含义,理解,而不是照抄。

[Fortran] 纯文本查看 复制代码
Program fcode_cn
  Implicit None
  Integer , parameter :: NFROM = 9425 , NTO = 9459 , NCOL=13 !//用常数定义可以减少以后的修改量
  Integer , parameter :: N = NTO-NFROM+1
  Integer :: a(N,NCOL) , i
  Open(10,File="D:\pre2011-5.txt")
  Do i = 1 , NFROM-1 !//先跳过(空读)前 NFROM-1 行
    read(10,*)
  End Do
  Do i = 1 , N !//读取N行
    read(10,*) a(i,:)
    write(*,'(i5,1x,i4,1x,i5,1x,i7,1x,i4,1x,i3,1x,i2,1x,3(i5,1x),3(i1,1x))') a(i,:)
  End Do
End Program fcode_cn

读成字符串的话,就非常简单了,都不需要指定有多少列。甚至都不需要数组。

[Fortran] 纯文本查看 复制代码
Program fcode_cn
  Implicit None
  Integer , parameter :: NFROM = 9425 , NTO = 9459 !//用常数定义可以减少以后的修改量
  Integer , parameter :: N = NTO-NFROM+1
  Integer :: i
  Character(len=512) :: cStr
  Open(10,File="D:\pre2011-5.txt")
  Do i = 1 , NFROM-1 !//先跳过(空读)前 NFROM-1 行
    read(10,*)
  End Do
  Do i = 1 , N !//读取N行
    read(10,'(a512)') cStr
    write(*,*) trim(cStr)
  End Do
End Program fcode_cn

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2018-1-27 16:55:18 | 显示全部楼层
注意,你可以拿 a 这个二维数组来计算。但是你不能拿 cStr 这个字符串来直接计算。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-5 13:33

Powered by Tencent X3.4

© 2013-2024 Tencent

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