Fortran Coder

标题: 求读取文件的算法 [打印本页]

作者: 对流云    时间: 2014-11-26 21:00
标题: 求读取文件的算法
有文本文件,里面数据如下,求神人写出计算每天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


作者: 楚香饭    时间: 2014-11-26 21:59
[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

作者: 对流云    时间: 2014-11-27 08:47
太感谢了,果然可以成功运行
作者: 对流云    时间: 2014-11-27 08:57
character(len=5) :: cDirRead,设置这个常量什么意思呢?
if ( cDir(k) == cDirRead ) exit 这个我也没理解
作者: 爷且无辜    时间: 2014-11-27 09:52
对流云 发表于 2014-11-27 08:57
character(len=5) :: cDirRead,设置这个常量什么意思呢?
if ( cDir(k) == cDirRead ) exit 这个我也没理 ...

上面那句话呢是设置一个长度为5的符号变量存储每条记录里的风向
下面那句话呢是识别到底是17种风向里的哪一种,然后在对应的频率次数上+1




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