閆春楠,劉蓬勃,李云鵬
(1.遼寧省水文水資源勘測局撫順分局,遼寧 撫順 113015;2.遼寧省水文水資源勘測局,遼寧 沈陽 110003;3.遼寧省江河流域管理局,遼寧 沈陽 110003)
遼寧省從1995年開始在MICRO-VAXⅡ機上利用ORACLE版本的數據庫建立起遼寧省基礎水文數據庫系統。1996年8月為配合全國水文數據庫的建設,遼寧省把水文數據庫移植到微機上,建立了遼寧省國家基礎水文數據庫系統。
目前,遼寧省國家基礎水文數據庫數據系列長度為109年(1902—2010年),庫結構依照SL324-2005《基礎水文數據庫表結構及標識符標準》標準建設,數據庫共有47個表,約30萬站年的數據。數據入庫方式主要有2種:1)經過計算機整編的水文資料轉換格式后入庫;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個字段,讀取數據時需多層循環語句嵌套所致。
水文整編資料的轉換、處理、入庫是水文數據管理部門每年的基本工作,不僅關系到國家基礎水文數據庫數據更新的效率、質量,也為防洪預報、水利規劃等工作提供了最新的數據服務,因此數據轉換程序要求高效、準確、穩定。該程序經過實踐檢驗完全滿足工作需要。
[1]SL324-2005,基礎水文數據庫表結構及標示符標準[S].