爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10647|回复: 1

[其他] systemfunc批量读取站点文件转为nc文件出现问题

[复制链接]

新浪微博达人勋

发表于 2021-10-16 09:55:58 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 又又又加零 于 2021-10-29 14:36 编辑

我用NCL中的systemfunc函数批量读取1961-2016的数据,出现了只能读取2007-2016年的数据,并且报错说数组超过上限(已经解决) 1.png                             2.png



代码参考的是《NCL图形分析语言入门到精通》PDF文件的站点数据处理为nc文件,我把主程序读取的代码放在下面了。
  1. ;-----------------------------------------主程序---------------------------------------------------

  2. begin


  3. ;----选取最大的文件获取所有站点信息
  4. bigfile = "E:/DATA/196101-201612/SURF_CLI_CHN_MUL_DAY-PRE-13011-201606.TXT"
  5.   stn_info = asciiread(bigfile,(/25170,13/),"integer")           ;25170行x13字段
  6.   stn=stn_info(::30,0)                                           ;各站间隔30日(6月的数据)
  7.   stnnum =dimsizes(stn)                                          ;站数(实际为839站)


  8. ;----经纬度数据格式为:度分(需转换为度)
  9. lats=stn_info(::30,1)/100+mod(stn_info(::30,1),100)/60.
  10. lons=stn_info(::30,2)/100+mod(stn_info(::30,2),100)/60.


  11. ;----高度单位0.1m和估测站点高度处理
  12. height=stn_info(::30,3)*0.1
  13. height=where(height.gt.10000.,height-10000.,height)
  14. delete(stn_info)                                                        ;释放内存
  15. sdate = 1951
  16. edate = 2016
  17. ndate=yyyymmdd_time(sdate,edate,"integer")


  18. ;----生成时间段内每一天的数组,如 year*10000+month*100+day
  19. ndays     = dimsizes(ndate)                                             ;总天数
  20. data      = new((/stnnum,ndays/),"integer")                             ;定义变量数组
  21. data      = 32766                                                       ;数组初始赋值缺省值


  22. ;----------------------------------读取数据文件操作------------------------------------------------

  23. files     = systemfunc("ls E:/AAAJDJS/AAA196101-201612/*.TXT")                         ;所有数据文件名列表
  24. nf        = dimsizes(files)                                                            ;列表中文件数
  25. cols      = 13                                                                         ;13个数据字段
  26. pos       = 0

  27. do i = 0,nf-1
  28.    print(i+"Nowreading..."+files(i))                                 ;过程监控
  29.    dummy                      = asciiread(files(i),-1,"integer")
  30.    rows                       = dimsizes(dummy)/cols
  31.    nfile                      = onedtond(dummy,(/rows,cols/))        ;转换为二维行x列
  32.    ntm                        = max(nfile(:,6))                      ;天数
  33.    stnf                       = nfile(::ntm,0)                       ;站号
  34.    nstnf                      = dimsizes(stnf)                       ;站数
  35.    idxstn                     = get1Dindex(stn,stnf)                 ;站索引位置
  36.    temp                       = reshape(nfile(:,9),(/nstnf,ntm/))    ;匹配数组:(站,时间)
  37.    data(idxstn,pos:pos+ntm-1) = temp(:,:)                            ;分段赋值累计降水量
  38.    pos                        = pos + ntm                            ;移动时间维位置指针
  39.    delete(dummy)                                                     ;注意清除循环内重复赋值变量
  40.    delete(nfile)
  41.    delete(rows)
  42.    delete(stnf)
  43.    delete(temp)
  44.    delete(idxstn)

  45. end do
复制代码




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

新浪微博达人勋

 楼主| 发表于 2021-10-16 19:30:42 | 显示全部楼层
本帖最后由 又又又加零 于 2021-10-29 14:37 编辑

解决了,是因为07年以前的数据后缀是小写

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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