正则表达式在地面气象观测数据文件处理中的应用
2017-07-19刘卫华李永超孙悦程
刘卫华++李永超++孙悦程
摘要 由于各方面的原因,地面气象观测数据文件已经不能满足日益增长的气象数据分析应用的需要,不能有效地发挥地面气象的重要作用。将文本文件存储的地面气象观测数据文件解码存储至数据库中,建立了大连市地面气象观测资料数据库。其中,正则表达式的应用使地面气象观测数据文件的处理过程大大简化,效率提高。
关键词 地面气象观测数据;数据库;正则表达式
中图分类号 P416.2 文献标识码 A 文章编号 1007-5739(2016)16-0190-02
Abstract Due to various reasons,the ground meteorological observation data file has been unable to meet the growing application of meteorological data analysis needs,and it can′t effectively play an important role in the meteorological observation.The ground meteorological observation data stored in the text file was decoded and stored to the database,and the data base of the ground meteorological observation data of Dalian City was established.Among them,the application of regular expression maked the processing process of the ground meteorological observation data file greatly simplified,and the efficiency was improved.
Key words ground meteorological observation data;data base;regular expression
地面气象观测数据文件(包括A、A0、A1、A6和A7文件,以下简称A文件)作为中国气象局规定的通用气象观测数据格式,通过地面气象测报业务软件进行制作、维护和审核,每个测站每月生成一个纯文本文件[1-2]。如直接使用,存在不能统计任意时段的统计值,更不能统计跨时段、跨区域的气象数据资料等缺点,不能满足气象数据整理分析统计的需求,无法有效地发挥气象观测资料的作用。
因此,为了实现跨时段、跨区域A文件观测资料的查询统计以及在此基础上的复杂应用,建立了大连市A文件观测资料数据库,使用基于Framework 4的C#语言实现了将全市各个台站的A文件全部解码读入Oracle数据库。
1 地面气象观测数据
最新的2003年版《地面气象观测规范》是在1979年颁布的《地面气象观测规范》基础上根据服务需求和技术发展扩充了部分观测要素的测量范围,摒弃了过时不用的部分观测项目和内容重新规定了气象数据存储格式。但为兼顾历史资料,2003年版的观测规范兼容了1979年版的观测记录规范。但由于其设计初衷仅为地面观测规范使用,存在以下问题:一是存储方式为文本方式,体积小,便于存储和保存,但读取困难,在气象预报服务及科学研究中不能快速查询与分析,也不能对各种气象要素进行有效的组合,是一种单一的独立的存储方式。二是各要素的指示码因观测次数不同、观测时段不同和历史沿革的不同而有较大差别,要素指示码种类繁多,增加了气象资料的读取难度。三是因为各种原因导致气象要素观测值缺测、异常、单位不一致等特殊情况的存在,增加了地面气象观测数据的处理难度。
地面气象观测数据A文件由台站参数、观测数据、质量控制、附加信息构成,其中观测数据包括排列顺序固定的20个气象要素,分别是气压(P)、气温(T)、湿球温度(I)、水汽压(E)、相对湿度(U)、云量(N)、云高(H)、云状(C)、能见度(V)、降水量(R)、天气现象(W)、蒸发量(L)、积雪(Z)、电线积冰(G)、风(F)、浅层地温(D)、深层地温(K)、冻土深度(A)、日照时数(S)和草面温度(B)。每个气象要素为文件体中一组独立的数据单位,由指示碼、方式位及该要素1个月的原始数据组成。根据气象站的分类不同及季节不同A文件内的观测数据也不同[3]。其结构如图1所示,采用自上而下的顺序存储方式,文件中各指示码对应的气象数据区块间相对独立。本文处理的文件包括经过人工审核的大连市辖区各台站自建站以来至2015年末的所有A文件。
2 A文件解码入库
2.1 数据库存储
A文件虽具有严格的数据存储编码格式,但同时也存在读取困难、通用性差、统计分析不便及无法网络应用等缺点,为此本文将A文件解码入库至Oracle数据库存储。Oracle数据库作为一种成熟关系型数据库,在存储地面气象观测数据时,具有提取简单、分析统计方便等优势。
2.2 文件解码流程
考虑到A文件观测数据地面要素种类多,编码规则繁杂,若想一次性将所有要素解码入库则较困难。本文解码入库思路为化繁为简,即分别按照20个气象要素标识逐个遍历所有A文件,从中提取出对应气象要素文本段,再将该气象要素解码入库。以气压(P)要素为例,解码流程如图2所示。
3 正则表达式的应用
3.1 正则表达式的定义
正则表达式(regular expression)是计算机科学中的一个概念,是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑[4-6]。可以通过正则表达式检查给定的字符串是否与其匹配,也可通过正则表达式从字符串中获取想要的特定部分。正是由于正则表达式字符处理能力强大、高效灵活、适应性强,广泛用于字符串的校验、替换和提取。
3.2 正则表达式的应用
A文件是一种文件类型、要素方式位和编码方式繁杂多样的纯文本文件,如使用传统的文本读写方式往往需要逐行读入,再按照不同规则进行数据文本的合并和分离,其中可能需要进行多次读写处理,效率较低且容易出错。在 .NET中使用正则表达式支持,需要引入System.Text.RegularExpressions命名空间,主要函数有以下几个: ①Regex.IsMatch()方法,返回一个bool值,如果有匹配项,返回True,否则返回False。②Regex.Replace()方法,使用制定的替换字符串替换与制定正则表达式匹配的所有字符串。③Regex.Match()方法,在输入字符串中搜索匹配正则表达式模式的子字符串,并将第一个匹配项作为单个匹配对象返回。④Regex.Split()方法,在由正则表达式模式定义的位置将输入字符串拆分为一个子字符串数组。
本文构造了多个正则表达式(C#语言实现)实现了一系列字符串操作,提高了处理效率。
(1)为了整理要素文本段格式,方便下一步的分割字符串,需要替换1个或多个连续空格为1个,使用正则表达式:
Regex.Replace(input,@"\s+"," ");
(2)从整个A文件里快速截取气压(P)要素文本段便于下一步处理,不采用逐行读入遍历的方式,使用正则表达式:
Regex.Match(input,@"^P[s\S]*?="Regex Options.Mul-tiline);
此表达式以多行模式匹配以字符P开始,中间有任意多个字符(包括换行符),并以等号结束的文本段。
此外对于有以D=代表整月缺测,以及D0、D7、D9三种指示码指示的浅层地温(D)要素一次性匹配所有可能性使用:
Regex.Match(input,@"^D(=|0[\s\S]*?=|7[\s\S]*?=|9[\s\S]*?=)",RegexOptions.Multiline);
(3)A文件每天的數据以"."结尾,为了合并一天的数据到一行内,使用正则表达式替换不以.结尾的换行符为空格:
Regex.Replace(input,@"([^.])(\r\n)","$1 ");
(4)文本段逐行(一行代表一天数据)以单个空格为分隔符分割获得每小时气压值并判断其是否为正常值:
string[]inputstr = Regex.Split(result," ");//分割逐小时气压值
for(int n = 0;n < inputstr.Length;n++)
{
if(Regex.IsMatch(inputstr[n],@"^\d{4}$"))
{
//气压值匹配四位数字,为正常值
}
else
{
//气压值不匹配四位数字,为缺测等非正常值
}
}
(5)对于截取到的气象要素数据,判断该字符串是否为整数,以方便下一步进行转换并存入数据库可使用:Regex.IsMatch(input,@"^-?\d+$");//判断该字符串是否为整数(包括负整数)。
4 结语
大连市地面气象观测资料数据库的建立,完成了各台站建站以来地面气象观测数据的数据库存储,为气象观测资料的二次开发应用奠定了基础。而正则表达式在气象观测资料文件处理中的使用,使得字符串处理时节约大量编程的时间,极大提高工作效率,同时也能使所编写出来的程序代码更简洁,可维护性更强,解码入库的错误率降低。
5 参考文献
[1] 管杰裕.正则表达式在气象信息处理中的应用[J].广西气象,2006,27(增刊1):107-108.
[2] 田兰金,石声,李波,等.基于XML和正则表达式的气象数据处理系统[J].计算机科学,2013,40(11A):432-434.
[3] 郜庆林,马琰钢,吴孟春,等.浙江省地面气象观测数据A文件资料解读入库方案[J].浙江气象,2009,30(增刊1):48-50.
[4] 潘存良.基于PHP的正则表达式在气象信息处理中的应用[J].沙漠与绿洲气象,2015,9(增刊1):129-130.
[5] 李耀东.呼伦贝尔气象资料A0文件的数据库存储实现[D].成都:电子科技大学,2014.
[6] 中国气象局.地面气象观测数据文件和记录簿表格式[M].北京:气象出版社,2005.
[7] 田兰,金石声,李波,等.基于XML和正则表达式的气象数据处理系统[J].计算机科学,2013(S2):432-435.
[8] 管杰裕.正则表达式在气象信息处理中的应用[J].广西气象,2006(S1):107-108+111.
[9] 舒秦.气象报表天气现象的分析与统计[J].电脑编程技巧与维护,2015(4):46-48.