- 积分
- 651
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2021-9-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 又又又加零 于 2021-10-29 14:36 编辑
我用NCL中的systemfunc函数批量读取1961-2016的数据,出现了只能读取2007-2016年的数据,并且报错说数组超过上限(已经解决)
代码参考的是《NCL图形分析语言入门到精通》PDF文件的站点数据处理为nc文件,我把主程序读取的代码放在下面了。
- ;-----------------------------------------主程序---------------------------------------------------
- begin
- ;----选取最大的文件获取所有站点信息
- bigfile = "E:/DATA/196101-201612/SURF_CLI_CHN_MUL_DAY-PRE-13011-201606.TXT"
- stn_info = asciiread(bigfile,(/25170,13/),"integer") ;25170行x13字段
- stn=stn_info(::30,0) ;各站间隔30日(6月的数据)
- stnnum =dimsizes(stn) ;站数(实际为839站)
- ;----经纬度数据格式为:度分(需转换为度)
- lats=stn_info(::30,1)/100+mod(stn_info(::30,1),100)/60.
- lons=stn_info(::30,2)/100+mod(stn_info(::30,2),100)/60.
- ;----高度单位0.1m和估测站点高度处理
- height=stn_info(::30,3)*0.1
- height=where(height.gt.10000.,height-10000.,height)
- delete(stn_info) ;释放内存
- sdate = 1951
- edate = 2016
- ndate=yyyymmdd_time(sdate,edate,"integer")
- ;----生成时间段内每一天的数组,如 year*10000+month*100+day
- ndays = dimsizes(ndate) ;总天数
- data = new((/stnnum,ndays/),"integer") ;定义变量数组
- data = 32766 ;数组初始赋值缺省值
- ;----------------------------------读取数据文件操作------------------------------------------------
- files = systemfunc("ls E:/AAAJDJS/AAA196101-201612/*.TXT") ;所有数据文件名列表
- nf = dimsizes(files) ;列表中文件数
- cols = 13 ;13个数据字段
- pos = 0
- do i = 0,nf-1
- print(i+"Nowreading..."+files(i)) ;过程监控
- dummy = asciiread(files(i),-1,"integer")
- rows = dimsizes(dummy)/cols
- nfile = onedtond(dummy,(/rows,cols/)) ;转换为二维行x列
- ntm = max(nfile(:,6)) ;天数
- stnf = nfile(::ntm,0) ;站号
- nstnf = dimsizes(stnf) ;站数
- idxstn = get1Dindex(stn,stnf) ;站索引位置
- temp = reshape(nfile(:,9),(/nstnf,ntm/)) ;匹配数组:(站,时间)
- data(idxstn,pos:pos+ntm-1) = temp(:,:) ;分段赋值累计降水量
- pos = pos + ntm ;移动时间维位置指针
- delete(dummy) ;注意清除循环内重复赋值变量
- delete(nfile)
- delete(rows)
- delete(stnf)
- delete(temp)
- delete(idxstn)
- end do
复制代码
|
|