Fortran Coder

标题: Fortran读取规则数组的固定行列 [打印本页]

作者: 向着光亮    时间: 2018-1-27 11:10
标题: Fortran读取规则数组的固定行列
如图所示,想编写一个程序读取数组大小为(26009行,13列),中的第9425-9459行,13列的内容,由于是新手学习Fortran,编写着实在写不下去了,忘各位大神能够指导指导,不甚感激!

QQ截图20180127110509.png (124.05 KB, 下载次数: 420)

QQ截图20180127110509.png

作者: fcode    时间: 2018-1-27 11:38
[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

作者: 向着光亮    时间: 2018-1-27 12:12
fcode 发表于 2018-1-27 11:38
[mw_shl_code=fortran,true]Program fcode_cn
  Implicit None
  Integer , parameter :: NFROM = 9425 , N ...

谢谢fcode研讨团队的每一个人,刚刚读取了,可是读取的格式好像不对,要求是按照原格式读取出来,可是运行后是这样,试了其他办法也不行,它好像是按行一个个数字读取的,不是按照原来的矩阵格式,求解啊专家!

QQ截图20180127120928.png (104.18 KB, 下载次数: 406)

QQ截图20180127120928.png

作者: fcode    时间: 2018-1-27 12:17
读到内存里就没有格式了。内存里是二进制(无格式的)
你只有在输出的时候,再重新指定格式。

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

知识补充:有格式的数字,是给人看的,但是计算机不能计算(比如加减乘除)。计算机只能计算无格式的二进制。
作者: 向着光亮    时间: 2018-1-27 12:28
fcode 发表于 2018-1-27 12:17
读到内存里就没有格式了。内存里是二进制(无格式的)
你只有在输出的时候,再重新指定格式。

是的,我也知道是这个格式的问题,可是就是不能设置好,我设置的都是最后都是一行输出了,您能不能在帮忙看看如何才能输出数组格式的,不甚感激啊,实在是搞不定,先谢谢哈
作者: 向着光亮    时间: 2018-1-27 12:36
fcode 发表于 2018-1-27 12:17
读到内存里就没有格式了。内存里是二进制(无格式的)
你只有在输出的时候,再重新指定格式。

补充求助,怎样读写成字符串以保留原来格式,恕我是菜鸟实在不知,前面都定义整型了,蒙圈了
作者: fcode    时间: 2018-1-27 16:52
关于格式输出,你可以看彭国伦书,第四章第四节。

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

[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


作者: fcode    时间: 2018-1-27 16:55
注意,你可以拿 a 这个二维数组来计算。但是你不能拿 cStr 这个字符串来直接计算。
作者: 向着光亮    时间: 2018-1-28 09:53
fcode 发表于 2018-1-27 16:55
注意,你可以拿 a 这个二维数组来计算。但是你不能拿 cStr 这个字符串来直接计算。 ...

好的,非常感谢,又学到了知识
作者: 那一片云    时间: 2018-3-30 22:08
http://muchong.com/html/201510/9536987.html




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2