使用NCL修改NetCDF文件Times变量遇类型不匹配错误,求解决方案
问题:修改NetCDF中Times变量的时间字符时报类型不匹配错误
问题背景
我有一个NetCDF文件,其中Times变量的时间值为2010-06-19_01:00:01,尝试用NCL脚本将最后一位的1改为0,但运行时出现类型不匹配错误。
Times变量属性信息
(0) Type of 'Times': character (0) Dimensions of 'Times': 1 (1) Dimensions of 'Times': 19 (0) Values of 'Times': Variable: times Type: character Total Size: 19 bytes 19 values Number of Dimensions: 2 Dimensions and sizes: [Time | 1] x [DateStrLen | 19] Coordinates: Number Of Attributes: 0 (0,0) 2 (0,1) 0 (0,2) 1 (0,3) 0 (0,4) - (0,5) 0 (0,6) 6 (0,7) - (0,8) 1 (0,9) 9 (0,10) _ (0,11) 0 (0,12) 1 (0,13) : (0,14) 0 (0,15) 0 (0,16) : (0,17) 0 (0,18) 1
原修改脚本
begin f = addfile("cstm_d01_2010-06-19_01_00_00.nc", "r+") times = f->Times times(0,18) = "0" f->Times = times delete(f) end
报错信息
fatal:Assignment type mismatch, right hand side can't be coerced to type of left hand side
fatal:["Execute.c":8637]:Execute: Error occurred at or near line 10 in file test2.ncl
解决方案
问题根源:NCL中该Times变量的单个元素是单字符类型,而你赋值的"0"是长度为1的字符串,两者类型不匹配。以下是两种可行修改方式:
方法1:直接用单字符赋值
将赋值语句中的双引号改为单引号,明确表示单个字符:
begin f = addfile("cstm_d01_2010-06-19_01_00_00.nc", "r+") times = f->Times times(0,18) = '0' # 单引号包裹单个字符 f->Times = times delete(f) end
方法2:重构完整时间字符串(适合多位置修改)
先将二维字符数组转换为完整字符串,修改后再拆分回数组格式:
begin f = addfile("cstm_d01_2010-06-19_01_00_00.nc", "r+") times = f->Times # 把二维字符数组拼接成完整字符串 time_str = str_join(times(0,:), "") # 修改指定位置的字符 time_str(18) = '0' # 将字符串拆分回原二维数组格式 times(0,:) = str_split(time_str, "", 19) f->Times = times delete(f) end
内容的提问来源于stack exchange,提问作者Haochen
相关产品推荐
相关产品推荐

