爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 2592|回复: 3

[混合编程] IDL编程学习之多分隔符读取8位有效数字数据

[复制链接]

新浪微博达人勋

发表于 2018-9-20 15:05:34 | 显示全部楼层 |阅读模式

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

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

x
附件数据内容为:
2018/9/14 14:13:29;118.488777;31.696345;67.2413793103448;39;100.189655172414
2018/9/14 14:13:49;118.488908;31.696348;74.5454545454545;41;109.954545454545
2018/9/14 14:14:09;118.488908;31.696348;58.8235294117647;40;90.5882352941176

数据含义:日期、时间、经度、纬度、PM10浓度、PM2.5浓度、TSP浓度
先看看数据有多少行,行数放入raw:
  a=read_ascii('C:\Users\Administrator\Desktop\1.txt',data_start=0)
  x=a.field1
  sizex=size(x)
  raw=sizex[2]
按字符串读取数据,存入x:
  openr,lun,'C:\Users\Administrator\Desktop\1.txt',/get_lun
  x=strarr(1,raw)
  readf,lun,x
将字符串数组中的斜杠、空格、冒号都用分号代替(好点子!):
  x=x.replace('/',';')
  x=x.replace(' ',';')
  x=x.replace(':',';')
  print,x
将字符串以分号分割,再转为双精度型(8位有效数字)
  y=strsplit(x,';',/extract)
  print,double(y[0]),double(y[1]),double(y[2])

输出:
2018;9;14;14;13;29;118.488777;31.696345;67.2413793103448;39;100.189655172414
2018;9;14;14;13;49;118.488908;31.696348;74.5454545454545;41;109.954545454545
2018;9;14;14;14;09;118.488908;31.696348;58.8235294117647;40;90.5882352941176
       2018.0000       9.0000000       14.000000       14.000000       13.000000       29.000000
       118.48878       31.696345       67.241379       39.000000       100.18966
       2018.0000       9.0000000       14.000000       14.000000       13.000000       49.000000
       118.48891       31.696348       74.545455       41.000000       109.95455
       2018.0000       9.0000000       14.000000       14.000000       14.000000       9.0000000
       118.48891       31.696348       58.823529       40.000000       90.588235

1.txt

232 Bytes, 下载次数: 0, 下载积分: 金钱 -5

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

新浪微博达人勋

 楼主| 发表于 2018-9-20 15:25:46 | 显示全部楼层
脚本和数据见附件,
按read_ascii函数读取数据,只有6位有效数字,该脚本有8位有效数字
黑线是原始数据,红线是滑动平均
TIM截图20180920152252.jpg

0.txt

22.71 KB, 下载次数: 0, 下载积分: 金钱 -5

YangChen_Exact_Read.pro

1.61 KB, 下载次数: 1, 下载积分: 金钱 -5

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

新浪微博达人勋

 楼主| 发表于 2018-9-20 23:04:27 | 显示全部楼层
我发现,在控制台print一个浮点数,会原样出来,在脚本里print,就按6位有效数字输出
不过可以设置format
s='123.456789'
print,double(s),format='(f10.6)'

输出:
123.456789
其中10是有效数字位数,6是小数点后位数
这样,经纬度就可以精确到小数点后第6位,也就是米级别,精度就够了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-10-11 17:20:24 | 显示全部楼层
8位有效数字读取新法数据txt文件:
    0.00123456789    0.00123456789
    0.00123456789    0.00123456789

代码:
  openr,lun,'C:\Users\Administrator\Desktop\2.txt',/get_lun
  x=dindgen(2,2)
  readf,lun,x
  print,x

输出:
    0.0012345679    0.0012345679
    0.0012345679    0.0012345679

可见,用double型容器装数据也行!!

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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