姚 迪,顏庭柏
1.南京市六合區(qū)氣象局,江蘇 南京 211500
2.南京市氣象局,江蘇 南京 210008
伴隨國民經(jīng)濟(jì)與科技水平的快速發(fā)展,氣象現(xiàn)代化設(shè)備越來越多的投入到業(yè)務(wù)日常運行之中。目前,氣象系統(tǒng)觀測儀器多為自動觀測,每種設(shè)備相對獨立,并分別生成氣象數(shù)據(jù)文件。氣象數(shù)據(jù)文件作為觀測成果對于氣象研究具有極其重要的科學(xué)價值。為便于統(tǒng)一存儲、保證氣象數(shù)據(jù)文件獲取的完整性與連貫性,避免因斷電、觀測設(shè)備故障等原因造成數(shù)據(jù)丟失,有必要將各種氣象數(shù)據(jù)文件進(jìn)行集中管理。因此,實現(xiàn)異機(jī)備份氣象數(shù)據(jù)文件是非常有必要的。同時,因氣象數(shù)據(jù)文件存在多樣性、時效性等特點,市場上諸多應(yīng)用程序?qū)τ趥浞輾庀髷?shù)據(jù)文件并不適用,無法滿足氣象部門對于備份文件的特殊要求。相比較而言,由氣象部門工作人員自身開發(fā)異機(jī)備份程序,針對性則更強(qiáng),更貼近需求,所開發(fā)程序通常具有靈活、高效的優(yōu)點。
異機(jī)備份氣象數(shù)據(jù)文件,可以最大限度的保證數(shù)據(jù)文件的存儲安全性,實現(xiàn)與原機(jī)存儲的雙重保險。通過簡單的批處理命令,使用CMD命令處理器逐條解釋執(zhí)行,可在DOS環(huán)境下實現(xiàn)對氣象數(shù)據(jù)文件的異機(jī)備份,如若保存多種氣象數(shù)據(jù)文件,則運轉(zhuǎn)周期長,效率明顯降低,并缺乏交互能力,靈活性及可擴(kuò)展性不強(qiáng)。因此,有必要引入高一級程序語言來實現(xiàn)異機(jī)備份氣象數(shù)據(jù)文件的要求。
C#(C sharp)語言是微軟(Microsoft)公司為.NET Framework量身訂做的程序語言,C#擁有C/C++的強(qiáng)大功能以及Visual Basic簡易易用的特性,是第一個組件導(dǎo)向(Component-oriented)的程序語言,和C++與Java一樣亦為對象導(dǎo)向(object-oriented)程序語言。綜上,C#是一種安全的、穩(wěn)定的、簡單的、優(yōu)雅的編程語言,它在繼承C和C++強(qiáng)大功能的同時去掉了一些它們的復(fù)雜特性(例如沒有宏和模版,不允許多重繼承)。C#綜合了VB簡單的可視化操作和C++的高運行效率,因其強(qiáng)大的操作能力、優(yōu)雅的語法風(fēng)格、創(chuàng)新的語言特性和便捷的面向組件編程的支持,具有極高的使用價值。
在明確所使用的程序語言之后,我們需對實現(xiàn)思路展開梳理。本文僅以一般氣象臺站常有的EN風(fēng)儀數(shù)據(jù)文件及自動氣象站B和采集數(shù)據(jù)文件為例進(jìn)行說明:
1)了解氣象數(shù)據(jù)文件結(jié)構(gòu)并對文件格式進(jìn)行定義:EN風(fēng)儀數(shù)據(jù)文件每日生成FA與DF兩種數(shù)據(jù)文件,B和采集數(shù)據(jù)文件則包含有B、Z、P、T、U、W、R共計7種文件。經(jīng)過總結(jié),我們可簡單理解為上述文件格式分別為FAyyMM.dat、DFyyMM.dat、BIIiiiMM.0yy、ZIIiiiMM.0yy、PIIiiiMM.0yy、TIIiiiMM.0yy、UIIiiiMM.0yy、WIIiiiMM.0yy、RIIiiiMM.0yy,其中 IIiii為臺站區(qū)站號、MM為月份、yy為年份后兩位。不難發(fā)現(xiàn),對于EN風(fēng)儀數(shù)據(jù)文件,我們可將其定義為“FA(DF)”+“yyMMM”+“.dat”;對于固定臺站 ,其區(qū)站號不變,如六合氣象站為“58235”,則B文件格式可固定為“B58235”+“MM.0yy”,其他采集數(shù)據(jù)文件格式依此類推。
2)確定C#程序?qū)崿F(xiàn)方針并選用合適語句:本文僅針對簡單異機(jī)氣象數(shù)據(jù)文件備份,故以簡單思路為之。經(jīng)過多次驗證,我們得出在保證原存儲設(shè)備和目的存儲設(shè)備內(nèi)部時鐘準(zhǔn)確的基礎(chǔ)上,以當(dāng)前時間查找最新氣象數(shù)據(jù)文件進(jìn)行備份方法簡單可行。因此,在C#中,需使用時間函數(shù)。
首先,以EN風(fēng)儀氣象數(shù)據(jù)文件為例,需對“yyMM”進(jìn)行賦值,有String FileStr = DateTime.Now.ToString("yyMM"),取出當(dāng)前時間,如“1011”;其次,對文件格式進(jìn)行描述,為FileStr = "FA(DF)" + FileStr + ".dat",這樣,備份氣象數(shù)據(jù)文件名被定義;然后,對原存儲路徑與目的存儲路徑分別進(jìn)行確定,通過語句“System.IO.File.Copy”即可實現(xiàn)異機(jī)備份,注意的是,copy語句要求前后路徑指向文件名,同時,在存儲氣象數(shù)據(jù)文件時,應(yīng)使用“true”語句,以實現(xiàn)覆蓋存儲。對于自動氣象站數(shù)據(jù)文件的備份,在EN風(fēng)儀氣象數(shù)據(jù)文件基礎(chǔ)之上,只需對時間及文件名進(jìn)行重新定義,便能嫁接過來實現(xiàn)異機(jī)氣象數(shù)據(jù)文件備份了,程序舉例如下:
String FileStr = DateTime.Now.ToString("MM.0yy"),
FileStr = "B58235" + FileStr,
String pathStr = "\\172.21.90.131\AwsSource\"+ FileStr,
String sourcePath = "F:\文件備份\"+ FileStr,
System.IO.File.Copy(pathStr, sourcePath, true),
MessageBox.Show("備份成功")。
應(yīng)該說,我們設(shè)計的這套異機(jī)備份氣象數(shù)據(jù)文件程序,通俗直觀容易理解,思路清晰,實現(xiàn)方便,對基層臺站具有較高的可操作性,各臺站可通過“計劃任務(wù)”,實現(xiàn)定時氣象數(shù)據(jù)文件的異機(jī)備份。另一方面,該程序若進(jìn)一步完善,引入讀寫程序方法、日志報錯、失敗再存儲等功能,對于所需備份氣象數(shù)據(jù)文件舉一反三,擴(kuò)展存儲文件類型,就可以實現(xiàn)更為完善、實用的功能,也將具有更為寬闊的推廣空間。
[1]http://baike.baidu.com/view/6590.htm.
[2]Karli Watson,Christian Nagel.C#入門經(jīng)典[M].3版.北京:清華大學(xué)出版社.
[3]李文強(qiáng).跟我學(xué)C#程序設(shè)計[M].北京:清華大學(xué)出版社.