- 积分
- 3628
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-10-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
附件有2个nc文件,其中以“*N01V1.NC”结尾的文件中没有空变量,以“*N07V1.NC”结尾的文件中有空变量
用函数ncdf_varget,file_id,var_id,var将文件id为file_id、变量id为var_id的量赋给var时会报错,程序会当掉!
下面我使用捕捉程序错误的方法跳过这个异常:
pro read_nc
;nc文件所在目录:
fold='C:\Users\Administrator\Desktop\nc\'
;准备一个存在非空变量的nc文件:
goodfile=fold+'FY4A-_LMI---_N_REGX_1047E_L2-_LMIE_SING_NUL_20180728000000_20180728000449_7800M_N01V1.NC'
;该文件ID:
goodfile_id = ncdf_open(goodfile, /nowrite )
;如果第一个变量非空,就用这个变量:
good_var=ncdf_varinq(goodfile_id,0)
;非空变量的ID:
good_var_id= ncdf_varid(goodfile_ID,good_var.name)
;至此,正常文件的id和变量的id已获取,后面如遇到空变量,就用这2个量顶替
;可能存在空变量的待处理文件:
file=fold+'FY4A-_LMI---_N_REGX_1047E_L2-_LMIE_SING_NUL_20180728003510_20180728004449_7800M_N07V1.nc'
;获取文件ID:
file_id = ncdf_open(file,/nowrite)
;下面需要获取结构体变量名,根据名字把数据读出来
;返回值file_info是个结构体,给出了维度数、变量数,根据变量数我们进行循环:
file_info=ncdf_inquire(file_id)
;变量个数:
var_num=file_info.nvars
FOR varid=0,var_num-1 DO BEGIN;
var = ncdf_varinq( file_id,varid)
var_id=ncdf_varid(file_ID,var.name)
;看一下此次循环会获取的变量名:
print,'准备获取变量:',var.name
;用ncdf_varget函数获取变量的中间量:文件id和变量id
;之所以用中间量是为了在出错时替换之:
file_id2=file_id
var_id2=var_id
;判断变量是否空,默认非空:
;后面如果error=1变量就按原量赋之,如果error=0变量就赋NaN:
error=1
;找异常,出现异常时用前面准备的文件ID和变量ID顶替,这样程序就不会停了:
CATCH, Error_status
IF Error_status NE 0 THEN BEGIN
print,'出现空变量:',var.name
PRINT, 'Error index:', Error_status
PRINT, 'Error message:', !ERROR_STATE.MSG
file_id2=goodfile_id
var_id2=good_var_id
error=0
CATCH, /CANCEL
ENDIF
;获取变量:
ncdf_varget,file_id2,var_id2,mid_var
;如果变量空,mid_var就赋NaN:
if error eq 0 then mid_var=!values.f_nan
;把文件中每个量,赋给相同名字的变量
(scope_varfetch(var.name,/enter))=mid_var
ENDFOR
help,lon,lat,OBIType
end
输出:
准备获取变量:LON
出现空变量:LON
Error index: -176
Error message:
Array dimensions must be greater than 0.
准备获取变量:LAT
出现空变量:LAT
Error index: -176
Error message:
Array dimensions must be greater than 0.
准备获取变量:ETT
出现空变量:ETT
Error index: -176
Error message:
Array dimensions must be greater than 0.
准备获取变量:EOT
出现空变量:EOT
Error index: -176
Error message:
Array dimensions must be greater than 0.
准备获取变量:ER
出现空变量:ER
Error index: -176
Error message:
Array dimensions must be greater than 0.
准备获取变量:EFP
出现空变量:EFP
Error index: -176
Error message:
Array dimensions must be greater than 0.
准备获取变量:EA
出现空变量:EA
Error index: -176
Error message:
Array dimensions must be greater than 0.
准备获取变量:EGA
出现空变量:EGA
Error index: -176
Error message:
Array dimensions must be greater than 0.
准备获取变量:EXP
出现空变量:EXP
Error index: -176
Error message:
Array dimensions must be greater than 0.
准备获取变量:EYP
出现空变量:EYP
Error index: -176
Error message:
Array dimensions must be greater than 0.
准备获取变量:DQF
出现空变量:DQF
Error index: -176
Error message:
Array dimensions must be greater than 0.
准备获取变量:nominal_satellite_subpoint_lat
准备获取变量:nominal_satellite_subpoint_lon
准备获取变量:nominal_satellite_height
准备获取变量:geospatial_lat_lon_extent
准备获取变量:OBIType
准备获取变量:processing_parm_version_container
准备获取变量:algorithm_product_version_container
LON FLOAT = NaN
LAT FLOAT = NaN
OBITYPE LONG = 0
|
|