Fortran Coder

查看: 6675|回复: 4
打印 上一主题 下一主题

[文件读写] 求读取文件的算法

[复制链接]

4

帖子

2

主题

0

精华

入门

F 币
31 元
贡献
15 点
跳转到指定楼层
楼主
发表于 2014-11-26 21:00:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有文本文件,里面数据如下,求神人写出计算每天4点最后一列N,E等风向出现的频率
2013 1 1 21 WSW
2013 1 1 22 WSW
2013 1 1 23 W
2013 1 1 0 W
2013 1 1 1 W
2013 1 1 2 WSW
2013 1 1 3 WSW
2013 1 1 4 W
2013 1 1 5 W
2013 1 1 6 WSW
2013 1 1 7 SW
2013 1 1 8 SW
2013 1 1 9 WSW
2013 1 1 10 WSW
2013 1 1 11 WSW
2013 1 1 12 WSW
2013 1 1 13 SW
2013 1 1 14 W
2013 1 1 15 WSW
2013 1 1 16 WSW
2013 1 1 17 SW
2013 1 1 18 WNW
2013 1 1 19 E
2013 1 1 20 ENE
2013 1 2 21 NE
2013 1 2 22 ENE
2013 1 2 23 ENE
2013 1 2 0 ENE
2013 1 2 1 ENE
2013 1 2 2 ENE
2013 1 2 3 ENE
2013 1 2 4 ENE
2013 1 2 5 ENE
2013 1 2 6 ENE
2013 1 2 7 ENE
2013 1 2 8 ENE
2013 1 2 9 ENE
2013 1 2 10 ENE
2013 1 2 11 ENE
2013 1 2 12 E
2013 1 2 13 ENE
2013 1 2 14 ENE
2013 1 2 15 ENE
2013 1 2 16 ENE
2013 1 2 17 ENE
2013 1 2 18 ENE
2013 1 2 19 ENE
2013 1 2 20 ENE
2013 1 3 21 NE
2013 1 3 22 NE
2013 1 3 23 NE
2013 1 3 0 NE
2013 1 3 1 NE
2013 1 3 2 NE
2013 1 3 3 NE
2013 1 3 4 ENE
2013 1 3 5 ENE
2013 1 3 6 ENE
2013 1 3 7 ENE
2013 1 3 8 ENE
2013 1 3 9 NE
2013 1 3 10 NE
2013 1 3 11 ENE
2013 1 3 12 NE
2013 1 3 13 NE
2013 1 3 14 ENE
2013 1 3 15 E
2013 1 3 16 E
2013 1 3 17 E
2013 1 3 18 E
2013 1 3 19 NE
2013 1 3 20 ENE
2013 1 4 21 NE
2013 1 4 22 ENE
2013 1 4 23 ENE
2013 1 4 0 NE
2013 1 4 1 ENE
2013 1 4 2 ENE
2013 1 4 3 NE
2013 1 4 4 ENE
2013 1 4 5 ENE
2013 1 4 6 ENE
2013 1 4 7 ENE
2013 1 4 8 ENE
2013 1 4 9 E
2013 1 4 10 E
2013 1 4 11 NE
2013 1 4 12 ENE
2013 1 4 13 E
2013 1 4 14 E
2013 1 4 15 E
2013 1 4 16 ENE
2013 1 4 17 ENE
2013 1 4 18 E
2013 1 4 19 ESE
2013 1 4 20 E

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

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

沙发
发表于 2014-11-26 21:59:44 | 只看该作者
[Fortran] 纯文本查看 复制代码
Program www_fcode_cn
  Implicit None
  integer, parameter :: nDIR = 17 !// 17 种风向
  character(len=5) , parameter :: cDir(nDIR) = &
  (/'N','NNE','NE','ENE','E','ESE','SE','SSE','S','SSW','SW','WSW','W','WNW','NW','NNW','C'/)
  integer :: iDirNum( nDIR ) = 0
  character(len=79)  :: filename="MH_58230_20131.txt"
  integer, parameter :: fileid = 10
  integer :: status = 0
  logical alive
  integer i , a , d , k
  character(len=5) :: cDirRead
  !open(12,file='newdata.txt')
  inquire( file=filename, exist=alive)  
  if ( .not.alive ) then
    write(*,*) TRIM(filename)," doesn't exist."
  else
    open(fileid,file=filename,status="old")
    Do
      read(fileid,*,iostat=k) a , a , a , d , cDirRead
      if ( k /= 0 ) exit
      if ( d == 8 ) then
        Do k = 1 , nDIR
          if ( cDir(k) == cDirRead ) exit
        End Do
        iDirNum(k) = iDirNum(k) + 1
      end if
    End Do
    Do i = 1 , nDIR
      if( iDirNum(i) > 0 ) write(*,*) Trim(cDir(i)) , ' 出现' , iDirNum(i) , '次'
    End Do
    close(fileid)
  end if
End Program www_fcode_cn

4

帖子

2

主题

0

精华

入门

F 币
31 元
贡献
15 点
板凳
 楼主| 发表于 2014-11-27 08:47:02 | 只看该作者
太感谢了,果然可以成功运行

4

帖子

2

主题

0

精华

入门

F 币
31 元
贡献
15 点
地板
 楼主| 发表于 2014-11-27 08:57:14 | 只看该作者
character(len=5) :: cDirRead,设置这个常量什么意思呢?
if ( cDir(k) == cDirRead ) exit 这个我也没理解

8

帖子

0

主题

0

精华

入门

F 币
79 元
贡献
36 点
5#
发表于 2014-11-27 09:52:27 | 只看该作者
对流云 发表于 2014-11-27 08:57
character(len=5) :: cDirRead,设置这个常量什么意思呢?
if ( cDir(k) == cDirRead ) exit 这个我也没理 ...

上面那句话呢是设置一个长度为5的符号变量存储每条记录里的风向
下面那句话呢是识别到底是17种风向里的哪一种,然后在对应的频率次数上+1
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-24 01:53

Powered by Tencent X3.4

© 2013-2024 Tencent

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