爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2660|回复: 4

[求助] 关于提取文件数据

[复制链接]

新浪微博达人勋

发表于 2017-1-25 21:48:39 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我想把这个气象文件中date,tmax,tmin,rain四列提出,并且根据第一列判断年份然后按年份分别输出到多个文件(第一列81001的意思是81年第一天,一个文件有十几年)。现在我已经实现整列输提出,但是刚学编程不久,按年份输出还不会,不知谁有类似的代码,能不能分享一下 学习学习。
QQ截图20170121113910.png
QQ截图20170124113942.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-26 10:18:00 | 显示全部楼层
你可以,提取date的前两位字符作为新的变量或用取整的方法保留年份,再根据这个变量来输出。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-26 11:41:22 | 显示全部楼层
Penny_Kuan 发表于 2017-1-26 10:18
你可以,提取date的前两位字符作为新的变量或用取整的方法保留年份,再根据这个变量来输出。

你的意思我明白了,但是刚学编程不久,想问个比较基础的问题,就是我现在是把date设为动态数组integer, allocatable :: days(:)
根据年份要输出到多个文件,怎样根据年份自动生成多个文件并写入数据,再者文件名该怎末弄。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-1-26 14:10:21 | 显示全部楼层
  character*8::filename
  integer::yr,dy,date,stat=0
  real::srad,tmax,tmin,rain
  do yr=1981,1999    !假设数据到99年
    write(filename,'(i4,".txt")'),yr     !技巧,年份变为字符串,并加上.txt,变成要输出的文件名1981.txt,......
    open(yr,file=filename)             !打开所有要输出的文件
  end do
  open(7,file=该气象数据)
  read(7,*);read(7,*);read(7,*);read(7,*)    !跳过前4行没用的行
  do while(stat==0)
    read(7,*,iostat=stat),date,srad,tmax,tmin,rain
    yr=date/1000       !参照2楼,把日期中的年份提出
    dy=date-yr*1000  !提取日期中的天
    yr=yr+1900         !年份变成一九几几年
    write(yr,'(i3,4f6.1)'),dy,srad,tmax,tmin,rain    !输出到对应文件
  end do
  close(7)
  do yr=1981,1999
    close(yr)               !关掉所有文件
  end do
  附赠一条在linux shell下只要一行就搞定的命令
  sed '1,4d' 该气象数据 | awk '{yr=substr($1,1,2)+1900;$1=substr($1,3,3);print > yr".txt"}'

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2017-1-26 15:43:28 | 显示全部楼层
jstzysq 发表于 2017-1-26 14:10
character*8::filename
  integer::yr,dy,date,stat=0
  real::srad,tmax,tmin,rain

太谢谢了
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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