Fortran Coder

查看: 23058|回复: 11
打印 上一主题 下一主题

[文件读写] 很多数据中固定区域求平均,在新文件中输出

[复制链接]

8

帖子

1

主题

0

精华

入门

F 币
28 元
贡献
18 点
跳转到指定楼层
楼主
发表于 2015-4-4 11:36:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
6F 币
因对文件格式要求严格,在纵向每个数加上空格一共16个字符,计算后也要保持这样的格式,数据见附件。
现在想把每4个数围成的矩阵求平均,得到一个数,然后在新文件里输出。比如说第一行第一列,第一行第二列,第二行第一列,第二行第二列这四个数求平均得到一个数;    第一行第三列,第一行第四列,第二行第三列,第二行第四列这四个数求平均得到一个数;一次类推。然后所有得到的平均数在另一个文件中输出,格式要保持不变。

试了很多次,得不到想要的结果,各位大神帮帮忙啊!!



最佳答案

查看完整内容

[mw_shl_code=fortran,true]Program www_fcode_cn Implicit None Integer , parameter :: DP = Selected_Real_Kind( p = 13 ) !// 需保留13位有效数字 Integer , parameter :: NC = 18 !// 列 Integer , parameter :: NR = 14 !// 行 Real(Kind = DP ) :: rData(NC,NR) , rDataLite(NC/2,NR/2) integer :: i , j Open( 12 , File = "1.dat" ) Open( 13 , File = "输出.dat" ) Do i = 1 , NR Read( 12 , * ) ...
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

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

沙发
发表于 2015-4-4 11:36:07 | 只看该作者
[Fortran] 纯文本查看 复制代码
Program www_fcode_cn
  Implicit None
  Integer , parameter :: DP = Selected_Real_Kind( p = 13 ) !// 需保留13位有效数字
  Integer , parameter :: NC = 18 !// 列
  Integer , parameter :: NR = 14 !// 行
  Real(Kind = DP ) :: rData(NC,NR) , rDataLite(NC/2,NR/2)
  integer :: i , j
  Open( 12 , File = "1.dat" )
  Open( 13 , File = "输出.dat" )
  Do i = 1 , NR
    Read( 12 , * ) rData( : , i )
  End Do
  Do i = 1 , size(rDataLite,dim=2)
    Do j = 1 , size(rDataLite,dim=1)
      rDataLite( j , i ) = sum( rData( 2*j-1:2*j , 2*i-1:2*i  ) ) / 4.0_DP
    End Do
    Write( 13 , '(100f16.8)' ) rDataLite( : , i )
  End Do  
  Close( 13 )
  Close( 12 )
End Program www_fcode_cn
回复

使用道具 举报

8

帖子

1

主题

0

精华

入门

F 币
28 元
贡献
18 点
板凳
 楼主| 发表于 2015-4-4 11:37:10 | 只看该作者
文件传上了

1.zip

1.78 KB, 下载次数: 1

文件

回复

使用道具 举报

8

帖子

1

主题

0

精华

入门

F 币
28 元
贡献
18 点
地板
 楼主| 发表于 2015-4-4 14:42:00 | 只看该作者
楚香饭 发表于 2015-4-4 12:19
[mw_shl_code=fortran,true]Program www_fcode_cn
  Implicit None
  Integer , parameter :: DP = Selecte ...

谢谢大神,我试了一下。是我没表达清楚。不知道怎么传图片,我在新回复里传了一张压缩后的,麻烦大神看一下,图里边每个格子代表一个数。18列14行的数据求平均以后应该是9列4行。谢谢!
回复

使用道具 举报

8

帖子

1

主题

0

精华

入门

F 币
28 元
贡献
18 点
5#
 楼主| 发表于 2015-4-4 14:42:35 | 只看该作者
图片,谢谢   

求平均.png (8 KB, 下载次数: 1069)

求平均.png
回复

使用道具 举报

8

帖子

1

主题

0

精华

入门

F 币
28 元
贡献
18 点
6#
 楼主| 发表于 2015-4-4 14:43:29 | 只看该作者
楚香饭 发表于 2015-4-4 12:19
[mw_shl_code=fortran,true]Program www_fcode_cn
  Implicit None
  Integer , parameter :: DP = Selecte ...

说错了,是9行7列
回复

使用道具 举报

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

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

7#
发表于 2015-4-4 14:56:43 | 只看该作者
18列14行,平均后应该为 9列7行,而不是9行7列。

我的代码正是这样
回复

使用道具 举报

8

帖子

1

主题

0

精华

入门

F 币
28 元
贡献
18 点
8#
 楼主| 发表于 2015-4-4 18:54:19 | 只看该作者
本帖最后由 上帝19岁 于 2015-4-4 18:55 编辑
楚香饭 发表于 2015-4-4 14:56
18列14行,平均后应该为 9列7行,而不是9行7列。

我的代码正是这样

是的,是我大意了。这个代码是不错的。数据较小量的时候没问题,数据多了就会出现格式问题,麻烦再帮忙看下。我用的notepad++打开的 ,求平均后得到的数据有些乱,格式对不上。

这个是320列120行转160列60行。

前后对比.zip

616.11 KB, 下载次数: 14

回复

使用道具 举报

2033

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1641 元
贡献
709 点

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

9#
发表于 2015-4-4 19:26:34 | 只看该作者
把 17 行的
Write( 13 , '(100f16.8)' ) rDataLite( : , i )
改成
Write( 13 , '(400f16.8)' ) rDataLite( : , i )
就行了。

如果再大,你就把 400 改得更大
回复

使用道具 举报

8

帖子

1

主题

0

精华

入门

F 币
28 元
贡献
18 点
10#
 楼主| 发表于 2015-4-4 21:52:19 | 只看该作者
fcode 发表于 2015-4-4 19:26
把 17 行的
Write( 13 , '(100f16.8)' ) rDataLite( : , i )
改成

谢谢 ,可以了!因文件很多,好几千个,需要批量处理这样的文件,麻烦能帮忙加一个批量操作的循环吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-22 23:32

Powered by Tencent X3.4

© 2013-2024 Tencent

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