- 积分
- 1965
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-4-13
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本想直接用《NCL代码分享-MICAPS第四类数据转NetCDF文件》里的方法的,毕竟“不要重复发明轮子”,结果发现不知道为什么下载下来的数据里面带有大量的空行,因而上面提到的帖子里的内容就无法直接使用了,不得已又“重复发明轮子”了。
- function readMicaps3ModelScalar(filename:string)
- begin
- a = asciiread(filename, -1, "string")
- ; 去头
- asciiwrite("tmp.tmp", a(1:))
- delete(a)
- a = asciiread("tmp.tmp", -1, "float")
- ; 删除临时文件
- system("rm -rf tmp.tmp")
- ; 时间
- tunits = "hours since 1900-01-01 00:00:00"
- t = cd_inv_calendar(a(0), a(1), a(2), a(3), 0, 0, tunits, 0)
- period = (/a(4)/)
- ; 层次
- lvl = (/a(5)/)
- ; 经纬度
- m = fspan(a(8), a(9), toint(a(12)))
- m@units = "degrees_east"
- n = fspan(a(10), a(11), toint(a(13)))
- n@units = "degrees_north"
- ; 数据
- dat = onedtond(a(19:), (/1, 1, 1, toint(a(13)), toint(a(12))/))
- dat!0 = "fcst"
- dat!1 = "period"
- dat!2 = "level"
- dat!3 = "lat"
- dat!4 = "lon"
- dat&fcst = t
- dat&period = period
- dat&level = lvl
- dat&lat = n
- dat&lon = m
- return dat
- end
- begin
- dir = systemfunc("ls dat/")
- do i = 0, dimsizes(dir) - 1
- a = readMicaps3ModelScalar("dat/" + dir(i))
- printVarSummary(a)
- delete(a)
- end do
- end
复制代码 function的功能是传入数据文件的路径名,然后返回一个该4类数据对应的数组变量。
注1:考虑了万一以后会把多个起报时次、多个预报时效和多个预报层次拼接在一起的问题,返回的变量是个5维数组,依次是(起报时间,预报时效,层次,纬度,经度)。
注2:function中的“去头”是考虑到通常第一行会有一串数据说明的string,这串东西里面会有若干个数字,但是又暂时没找到什么方法跳过不读第一行,所以就暂时用了个临时文件tmp.tmp。
|
评分
-
查看全部评分
|