辽宁省水文整编资料入库分析
2012-03-30闫春楠刘蓬勃李云鹏
闫春楠,刘蓬勃,李云鹏
(1.辽宁省水文水资源勘测局抚顺分局,辽宁 抚顺 113015;2.辽宁省水文水资源勘测局,辽宁 沈阳 110003;3.辽宁省江河流域管理局,辽宁 沈阳 110003)
1 概况
辽宁省从1995年开始在MICRO-VAXⅡ机上利用ORACLE版本的数据库建立起辽宁省基础水文数据库系统。1996年8月为配合全国水文数据库的建设,辽宁省把水文数据库移植到微机上,建立了辽宁省国家基础水文数据库系统。
目前,辽宁省国家基础水文数据库数据系列长度为109年(1902—2010年),库结构依照SL324-2005《基础水文数据库表结构及标识符标准》标准建设,数据库共有47个表,约30万站年的数据。数据入库方式主要有2种:1)经过计算机整编的水文资料转换格式后入库;2)刊印的水文年鉴资料(纸介质)通过人工录入、校对存贮入库。近年来,辽宁省水文水资源勘测局加大了基础水文数据库建设的步伐,经过两次大规模的校对和补录,目前数据库完整度、准确度等指标都已经达到预期目标,数据整体质量已经完全达到国家要求。
2 转换程序分析
自1998年以来辽宁省水文水资源勘测局自主研发了水文资料整编程序,2008年以后开始使用北方片水文资料整编程序。因此形成了格式统一的Excel版本的水文资料整编成果,对于统一格式的水文资料整编成果就需要研发相对应的格式转换入库程序。目前已经完成了所有共计27个表的转换入库程序,由于VB语言与Excel可以实现无缝链接,并且容易掌握,因此该程序用VB语言编写。要实现VB与Excel的链接,首先在VB编辑器的工程中要引用Microsoft Excel类型库:从“工程”菜单中选择“引用”栏;选择 Microsoft Excel 11.0 Object Library(EXCEL2003),然后选择“确定”。表示在工程中要引用Excel类型库;其次在通用对象的声明过程中定义Excel对象;最后在程序中通过Excel操作的常用命令创建、打开、读取、写入、关闭、释放等等来进行数据转换的实现。由于整编资料的站点共计有600多个,而且每个资料项目有单独的Excel文件,最终的整编成果Excel文件有几千个之多,所以程序必须考虑到批量处理的因素。程序的主要思路是将数据读取到一维或二维数组中,然后进行必要的处理,如数字与符号的分离、日期的处理、整数位的处理等等,再将处理后的数据重新写入新建的Excel表中。目前由于整编资料中的测站编码还有个别站与基础水文数据库中的编码不一致,另外整编资料中难免有出错之处,因此本程序没有直接与数据库连接,而是将转换后的数据统一存放在新的Excel表中,经过人工处理后再入库,这样可以减少非法数据无法入库带来的麻烦。以下主要介绍几个典型表的程序开发过程。
1)日表类。日表中以“逐日平均水位表”最为典型,因为整编资料中会将水位整数位相同的部分省略掉,转换程序中应当添加上省略的整数位。
日表类数据的处理除考虑到以上因素外,还要考虑闰年与平年2月份天数的处理,在程序中加以判断即可。月表与年表的转换相对来说就比较简单了,主要考虑“连底冻”及“河干”等非数值型字段的处理情况,代码就不一一给出了。
2)实测表类。实测表中以“实测流量成果表”为例进行分析。由于“实测流量成果表”数据一般都会有好几页,并且长度不像日表中那么固定,所以在数组声明过程中一般声明为动态数组,然后在程序中对数据总体长度加以判断,再重新对动态数组分配长度。
“实测流量成果表”中水位的处理与日表中的类似,另外“断面位置”字段与“测验方法”字段中会有省略符号,需要进行替换。
3)摘录表类。摘录表中以“洪水水文要素摘录表”为例加以分析。“洪水水文要素摘录表”与实测表类似,数据总体长度也不是固定的,因此在数组声明过程中也要声明为动态数组,然后在程序中对数据总体长度加以判断,再重新对动态数组分配长度。
“洪水水文要素摘录表”中水位的处理与日表中的类似,读取数据的方式稍显复杂,这是因为该表的数据为三列分布,每列有6个字段,读取数据时需多层循环语句嵌套所致。
3 结语
水文整编资料的转换、处理、入库是水文数据管理部门每年的基本工作,不仅关系到国家基础水文数据库数据更新的效率、质量,也为防洪预报、水利规划等工作提供了最新的数据服务,因此数据转换程序要求高效、准确、稳定。该程序经过实践检验完全满足工作需要。
[1]SL324-2005,基础水文数据库表结构及标示符标准[S].