亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于C#的氣象原始觀測(cè)數(shù)據(jù)的分析與處理

        2016-08-26 09:08:37王長(zhǎng)利
        中低緯山地氣象 2016年1期
        關(guān)鍵詞:整理氣象解析

        王長(zhǎng)利

        (湖南省懷化市氣象局自動(dòng)化站,湖南 懷化 418000)

        ?

        基于C#的氣象原始觀測(cè)數(shù)據(jù)的分析與處理

        王長(zhǎng)利

        (湖南省懷化市氣象局自動(dòng)化站,湖南懷化418000)

        根據(jù)工作實(shí)際需要,使用C#技術(shù)對(duì)以文本格式存放的各類原始?xì)庀笥^測(cè)數(shù)據(jù)加以解析與整理,通過定義C#的抽象類,將數(shù)據(jù)解析和數(shù)據(jù)存儲(chǔ)有效分離,進(jìn)而將整理后的數(shù)據(jù)輸入到Excel文件或MSSQL數(shù)據(jù)庫中保存,從而達(dá)到 “一次解析,按需存儲(chǔ)”的目的,滿足了將觀測(cè)數(shù)據(jù)高效、方便、快捷、靈活地存儲(chǔ)為不同文件格式的需求。同時(shí),介紹了C#的多線程與委托技術(shù)在氣象數(shù)據(jù)處理中的應(yīng)用,以及利用MSChart組件對(duì)氣象數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析并繪制圖形的方法,所涉及的程序設(shè)計(jì)思路對(duì)于氣象數(shù)據(jù)的分析與處理具有一定的參考與借鑒意義。

        觀測(cè)數(shù)據(jù);C#技術(shù);多線程;抽象類;MSChart組件

        1 引言

        氣象觀測(cè)數(shù)據(jù)的分析與處理是氣象業(yè)務(wù)中一項(xiàng)極其重要的內(nèi)容。在日常氣象觀測(cè)工作中,有相當(dāng)一部分原始?xì)庀髷?shù)據(jù)是以文本格式的形式有規(guī)律地進(jìn)行保存的,這類以文本格式存儲(chǔ)的氣象資料,往往不便于查詢、分析與統(tǒng)計(jì),通常需要事先對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,加以解析整理后,保存為Excel文件或?qū)氲綌?shù)據(jù)庫中,再對(duì)數(shù)據(jù)加以分析與處理,以便獲得有價(jià)值的信息。氣象原始觀測(cè)數(shù)據(jù)長(zhǎng)達(dá)30 a以上,且按氣象要素各自單獨(dú)保存為一個(gè)文本文件,對(duì)于這類年份跨度長(zhǎng)、數(shù)據(jù)量大、文件格式多的氣象原始數(shù)據(jù),該如何處理以滿足將數(shù)據(jù)靈活、高效地保存為Excel文件或?qū)氩煌瑪?shù)據(jù)庫的實(shí)際需要呢?本文基于C#的抽象類、多線程與委托技術(shù),提出在分析與處理氣象原始觀測(cè)數(shù)據(jù)時(shí),將數(shù)據(jù)解析與數(shù)據(jù)存儲(chǔ)分離并保存為Excel文檔或輸入到數(shù)據(jù)庫的方法。

        2 處理程序簡(jiǎn)介

        氣象原始觀測(cè)數(shù)據(jù)分析與處理程序是“氣象資料檔案信息化系統(tǒng)”的一個(gè)子模塊,該模塊主要功能是對(duì)氣象原始觀測(cè)數(shù)據(jù)進(jìn)行整理與解析,按需導(dǎo)入Excel文件或MSSQL數(shù)據(jù)庫,并提供數(shù)據(jù)查詢、統(tǒng)計(jì)與分析、圖形繪制等功能,所使用的數(shù)據(jù)為按氣象要素分類保存的30 a以上的文本觀測(cè)記錄數(shù)據(jù)。圖1為將天氣現(xiàn)象原始觀測(cè)數(shù)據(jù)同步導(dǎo)入Excel文件和MSSQL數(shù)據(jù)庫時(shí)的程序運(yùn)行界面。

        3 各部分功能簡(jiǎn)介

        3.1原始觀測(cè)數(shù)據(jù)的處理

        本文以原始?xì)鉁財(cái)?shù)據(jù)為例,闡述解析與整理數(shù)據(jù)的方法,其它氣象要素的處理方法可據(jù)此參考。

        原始?xì)鉁財(cái)?shù)據(jù)被保存在一個(gè)文本文件中,每一行記錄著站點(diǎn)1 d的觀測(cè)數(shù)據(jù),從左至右依次對(duì)應(yīng)觀測(cè)的日期與時(shí)間、站號(hào)、4個(gè)時(shí)次(分別02、08、14、20時(shí))的溫度合計(jì)值、最高溫度、最低溫度等數(shù)據(jù),各組數(shù)據(jù)之間以制表符分隔,其處理流程見圖2。

        3.1.1按指定編碼讀取原始數(shù)據(jù)在某些氣象要素的原始觀測(cè)文件中,使用了自定義的天氣符號(hào)字符來記錄各種天氣現(xiàn)象,為了保證程序能夠正確地讀取觀測(cè)數(shù)據(jù),必須事先將編碼指定為gb2312或GBK,再讀取原始記錄,其代碼為:

        Int32 encodindCode = 936;//默認(rèn)為gb2312

        string strOrg = File.ReadAllText(filePath,Encoding.GetEncoding(encodindCode));

        其中filePath代表原始?xì)鉁財(cái)?shù)據(jù)文件的保存路徑。在讀取文件時(shí),最好一次性讀取全部文件內(nèi)容,不采取逐行讀取的方式,逐行讀取不利于從總體上分析與控制數(shù)據(jù),也不利于數(shù)據(jù)定位。

        3.1.2獲取總記錄數(shù)處理程序通過進(jìn)度條和百分比顯示數(shù)據(jù)分析與處理的整體進(jìn)度,所以在解析

        圖1 處理程序運(yùn)行界面Fig.1 Program running interface

        圖2 數(shù)據(jù)處理流程Fig.2 Data processing flow

        數(shù)據(jù)前需要事先獲知總記錄數(shù)。程序?qū)⒃加^測(cè)數(shù)據(jù)中的換行符全部替換為“@”,再借助Split函數(shù)將每條記錄存放到數(shù)組中,則數(shù)組的長(zhǎng)度便是原始數(shù)據(jù)的總記錄數(shù),主要代碼如下:

        strOrg = strOrg.Replace(" ", "#"); //每條記錄中分隔數(shù)據(jù)的制表符用#替換

        strOrg = strOrg.Replace(" ", "@");

        string[] dateData = strOrg.Split(new char[]{'@'});

        int lineCount = dateData.Length;//獲取總記錄數(shù)

        3.1.3數(shù)據(jù)解析與提取在站點(diǎn)的原始?xì)鉁財(cái)?shù)據(jù)中,每條記錄均與站點(diǎn)某一天的氣溫觀測(cè)數(shù)據(jù)相對(duì)應(yīng),通過上述的Split函數(shù),已將每一天的記錄存放到dateData數(shù)組中,利用foreach語句可讀取每一天的數(shù)據(jù),并將其作為抽象函數(shù)ParseData的參數(shù)傳遞,其部分代碼如下:

        startParseData(lineCount);

        foreach (String strDay in dateData){

        ParseData(strDay);

        ParseDataInfo();

        }

        endParseData();

        在上述代碼中,startParseData(lineCount)、ParseData(strDay)、ParseDataInfo()和endParseData()均是抽象方法,分別在數(shù)據(jù)開始解析前、解析時(shí)和解析后被調(diào)用,這4個(gè)抽象函數(shù)僅為繼承抽象類DataParse的子類OutputToExcel提供一個(gè)編程入口,以滿足將數(shù)據(jù)寫入不同文件時(shí)的需要。

        在站點(diǎn)原始?xì)鉁財(cái)?shù)據(jù)的處理中,考慮到每一條原始記錄數(shù)據(jù)含義均清晰明了,因而沒有對(duì)每一條記錄加以解析便作為ParseData(strDay)函數(shù)的參數(shù)傳遞給繼承類的實(shí)體。如果原始記錄數(shù)據(jù)中存在特殊代碼,就有必要進(jìn)一步解析,并將解析整理好的記錄數(shù)據(jù)作為參數(shù)傳遞。例如:在每小時(shí)觀測(cè)文件中使用了特殊的天氣符號(hào),不同的符號(hào)代表著不同的天氣現(xiàn)象,因而需要對(duì)這些特殊的符號(hào)進(jìn)行解析,并整理成規(guī)范格式的字符串后,再作為函數(shù)ParseData(strDay)的參數(shù)進(jìn)行傳遞。

        3.2Excel文件的生成

        為了將整理好的數(shù)據(jù)存儲(chǔ)為不同的形式,需要在繼承抽象類DataParse的子類中實(shí)現(xiàn)其父類的抽象方法ParseData(string gcData),并在該方法中將每一條觀測(cè)記錄gcData寫入到Excel文件或MSSQL數(shù)據(jù)庫中。

        OutputToExcel類則是對(duì)抽象類DataParse的繼承與實(shí)現(xiàn),其類中的toExcel(string gcData)方法可將解析與整理好的數(shù)據(jù)存儲(chǔ)到Excel文件中,具體的Excel的編程開發(fā)可參考有關(guān)資料[1-2]。將氣象觀測(cè)數(shù)據(jù)導(dǎo)入到Excel文件時(shí),需要重點(diǎn)關(guān)注以下幾點(diǎn):

        3.2.1大數(shù)據(jù)量的處理在Excel文件中,當(dāng)一張表的記錄數(shù)超過65 536條時(shí),再在此表中添加新記錄將會(huì)出錯(cuò)。對(duì)于近30 a大量觀測(cè)數(shù)據(jù)的處理,可通過添加新表的方式避免上述問題的發(fā)生,其部分代碼如下:

        //獲取當(dāng)前表中下一條可用記錄的行數(shù)

        int rowCount=xSheet.UsedRange.Rows.Count+1;

        //當(dāng)前記錄數(shù)超過65536時(shí),添加一張新表

        if (rowCount>65536){

        sheetCount++;

        xSheet = (Microsoft.Office.Interop.Excel.Worksheet)xBook.Sheets.Add(Missing.Value, xSheet, 1, Missing.Value);

        rowCount = 1;//初始化當(dāng)前記錄數(shù)

        }

        3.2.2寫入Excel文件在OutputToExcel類中,函數(shù)toExcel(gcData)所傳遞的參數(shù)正是整理解析后的每日氣溫觀測(cè)記錄,通過String[] dayDatas=gcData.Split(new char[]{'#'})便可獲取到每條記錄中的具體數(shù)值,將其寫入到當(dāng)前Excel表中,部分代碼為:

        rng = xSheet.get_Range(xSheet.Cells[rowCount,1],

        xSheet.Cells[rowCount,dayDatas.Length]);

        rng.Value2 = dayDatas;//數(shù)組方式賦值

        3.2.3保存Excel文件為了確保程序退出后能及時(shí)保存寫入Excel中的數(shù)據(jù),并正常結(jié)束Excel進(jìn)程以釋放所占用的內(nèi)存資源,在所有操作完畢后,應(yīng)對(duì)當(dāng)前xBook對(duì)象進(jìn)行保存,并結(jié)束xApp實(shí)例。

        上述任務(wù)是通過OutputToExcel類的close()函數(shù)來完成的,其部分代碼如下:

        xApp.DisplayAlerts = false;//不顯示提示

        Missing mv = Missing.Value;

        xBook.SaveAs(excelFile,mv,mv,mv,mv,mv,XlSaveAsAccessMode.xlNoChange,mv,mv,mv,mv,mv);

        xApp.Quit(); //結(jié)束Excel進(jìn)程。

        3.3統(tǒng)計(jì)分析

        根據(jù)實(shí)際工作需要,程序提供了對(duì)解析整理后的各類氣象要素進(jìn)行統(tǒng)計(jì)分析的功能,主要包括:氣溫、海平面氣壓、相對(duì)濕度、風(fēng)向、風(fēng)速、云量、降水量、能見度等要素的統(tǒng)計(jì)分析。在主界面中點(diǎn)擊“繪圖”將對(duì)近30 a氣象觀測(cè)數(shù)據(jù)進(jìn)行月統(tǒng)計(jì)和旬統(tǒng)計(jì)分析,運(yùn)行界面如圖3所示:

        圖3 統(tǒng)計(jì)分析界面Fig.3 Statistical analysis interface

        在對(duì)各氣象要素觀測(cè)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析之前,需要事先把近30 a的原始觀測(cè)數(shù)據(jù)解析整理后導(dǎo)入MSSQL數(shù)據(jù)庫中。統(tǒng)計(jì)分析時(shí),通過SQL查詢語句從數(shù)據(jù)庫中獲取數(shù)據(jù),再借助微軟MSChart組件,將其加入圖例數(shù)據(jù)系列,以線形圖、柱狀圖等形式繪制各氣象要素的統(tǒng)計(jì)分析結(jié)果。同時(shí),為了方便統(tǒng)計(jì)與分析,程序設(shè)置有圖例屬性的編輯,并提供全局圖、滾動(dòng)圖模式顯示圖形,支持最大值、最小值、平均值線的繪制等。

        4 關(guān)鍵技術(shù)

        由于各類氣象要素的原始觀測(cè)數(shù)據(jù)均以不同的文本文件單獨(dú)存放,為了增強(qiáng)程序的可移植性、數(shù)據(jù)處理的靈活性以及代碼的易維護(hù)性,在抽象類中提供對(duì)各類氣象要素原始數(shù)據(jù)加以解析與整理的方法,并將最終處理好的每一條記錄作為參數(shù),通過統(tǒng)一的抽象方法傳遞,這樣只需在其子類中實(shí)現(xiàn)該抽象方法,就能根據(jù)需要靈活地將整理好的數(shù)據(jù)導(dǎo)入到Excel文件或MSSQL數(shù)據(jù)庫中。

        試驗(yàn)結(jié)果表明,浮選金精礦經(jīng)浮選分離—鉛精礦、硫精礦分別再磨浸出工藝,可獲得合格鉛精礦,鉛回收率79.83%,金總回收率為94.55%,其中貴液中金占91.83%,鉛精礦中金占2.72%,銀總回收率為91.67%,其中貴液中銀占76.26%,鉛精礦中銀占15.41%,鉛精礦中少量不能浸出金、銀可隨之計(jì)價(jià)銷售。此方案避免了方案一中金、銀計(jì)價(jià)銷售影響收益的問題。

        4.1類

        為了實(shí)現(xiàn)將觀測(cè)數(shù)據(jù)存儲(chǔ)為不同的形式,程序?qū)?shù)據(jù)的解析定義為一個(gè)抽象類DataParse,而數(shù)據(jù)的存儲(chǔ)則定義為對(duì)該抽象類繼承的子類(如OutputToExcel類負(fù)責(zé)將數(shù)據(jù)存儲(chǔ)到Excel文件中,OutputToMSSQL類負(fù)責(zé)將數(shù)據(jù)導(dǎo)入MSSQL數(shù)據(jù)庫中),從而保證了氣象觀測(cè)數(shù)據(jù)解析與存儲(chǔ)的分離,以滿足“一次解析,按需存儲(chǔ)”的實(shí)際需求。文中所涉及的類及其函數(shù)說明如表1所示。

        表1 抽象類DataParse及其子類OutputToExcel說明

        本程序開發(fā)中還涉及到其它類,如負(fù)責(zé)界面顯示的主界面類FrmMain;負(fù)責(zé)數(shù)據(jù)庫連接與操作的數(shù)據(jù)庫類DB;繼承與實(shí)現(xiàn)抽象類DataParse并負(fù)責(zé)將數(shù)據(jù)寫入MSSQL數(shù)據(jù)庫的 OutputToMSSQL類,等等。

        4.2多線程

        站點(diǎn)各氣象要素的原始數(shù)據(jù)文件保存了近30 a的觀測(cè)數(shù)據(jù),對(duì)其進(jìn)行解析、整理、生成Excel文件或?qū)懭隡SSQL數(shù)據(jù)庫是一件非常費(fèi)時(shí)的工作。如果使用單一線程,在解析整理數(shù)據(jù)時(shí),程序界面中某些控件的內(nèi)容將得不到及時(shí)更新,會(huì)造成程序運(yùn)行不流暢、沒有響應(yīng)的“假死”或“卡頓”等現(xiàn)象,嚴(yán)重的甚至?xí)?dǎo)致鼠標(biāo)、鍵盤無反應(yīng),計(jì)算機(jī)無法操作與使用。

        為了避免上述問題的發(fā)生,提高數(shù)據(jù)處理的效率,利用C#的多線程技術(shù)[3],將數(shù)據(jù)的解析、整理與存儲(chǔ)放到后臺(tái)自動(dòng)處理,前臺(tái)界面主要滾動(dòng)顯示后臺(tái)處理程序整理后的每一條記錄,并通過進(jìn)度條顯示數(shù)據(jù)處理進(jìn)度。同時(shí),程序還采用了C#的委托技術(shù)[3],以確保前、后臺(tái)線程之間數(shù)據(jù)安全、順暢地傳遞。委托的部分代碼如下:

        //定義委托代理

        delegate void SetTextCallback(string text);

        private void SetText(string text){

        if (myfrm.myTxtShow.InvokeRequired){

        SetTextCallback d = new SetTextCallback(SetText);

        myfrm.Invoke(d, new object[] {text});

        }else{

        myfrm.myTxtShow.AppendText(text);

        }

        }

        SetText(string text)方法主要實(shí)現(xiàn)將后臺(tái)處理的每一條記錄在前臺(tái)主界面的文本控件myTxtShow中實(shí)時(shí)滾動(dòng)顯示。在該方法中,首先通過myfrm.myTxtShow.InvokeRequired屬性檢查前臺(tái)主界面中文本控件myTxtShow所在的主線程與調(diào)用SetText方法的后臺(tái)線程是否為同一線程。如果不是,則通過SetTextCallback委托前臺(tái)線程調(diào)用自身SetText方法。如果是,則將字符串text內(nèi)容追加到myTxtShow文本控件中。

        對(duì)于程序界面中進(jìn)度條控件的操作也采取相同的方式,通過委托進(jìn)行處理。

        5 結(jié)語

        本文重點(diǎn)闡述了使用C#的抽象類、多線程及委托技術(shù),對(duì)氣象原始觀測(cè)數(shù)據(jù)進(jìn)行解析與存儲(chǔ)、統(tǒng)計(jì)與分析的方法。所介紹的方法與思路,除了可以將觀測(cè)數(shù)據(jù)寫入Excel文件外,還可以將其寫入到各類數(shù)據(jù)庫如Access、MSSQL、MySQL、Oracle等,這些操作只需借助SQL語句,并在繼承抽象類DataParse的子類中實(shí)現(xiàn)抽象方法ParseData(string gcData)即可。為了使數(shù)據(jù)解析具有更好的移植性,建議將DataParse類生成為動(dòng)態(tài)鏈接庫,這樣不僅可應(yīng)用于各類工程軟件的開發(fā),還可應(yīng)用到網(wǎng)站建設(shè)等方面。

        氣象原始觀測(cè)數(shù)據(jù)分析與處理程序作為“氣象資料檔案信息化系統(tǒng)”的子程序,較好地滿足了氣象數(shù)據(jù)信息化建設(shè)的需要,實(shí)現(xiàn)了將原始觀測(cè)數(shù)據(jù)靈活、高效地存放到Excel文件和不同數(shù)據(jù)庫中的功能,其所創(chuàng)建的DataParse動(dòng)態(tài)鏈接庫,在氣象信息化網(wǎng)站的開發(fā)中得到充分應(yīng)用,取得了良好效果。

        [1] 黃春莎,朱小燕. 巧用Excel制作酸雨P(guān)H值質(zhì)量控制圖[J]. 貴州氣象,2013,37(4):52-54.

        [2] 黃世芹,王珺. VB編程環(huán)境下如何調(diào)用和生成EXCEL報(bào)表文檔[J]. 貴州氣象,2010,34(2):38-40.

        [3] 羅福強(qiáng),楊劍,張敏輝. C#程序設(shè)計(jì)經(jīng)典教程(第2版)[M]. 北京:清華大學(xué)出版社,2014.

        Analysis and Treatment of Meteorological Original Observation Data Based on C#

        WANG Changli

        (Huaihua Meteorological Automatic Station of Hunan Province,Huaihua 418008, China)

        According to the actual needs of the work, all kinds of original meteorological observation data stored in text format, was analyzed and organized by means of C# technology. By defining the C# abstract class, the data analysis and data storage were effectively separated, and then the processed and analyzed data were imported into the excel files or MSSQL database, so as to achieve the purpose of "One-time analysis, On-demand storage" and meet the requirements of efficient, convenient, fast and flexible storage of observed data in different file formats. At the same time, the application of C# in processing meteorological data, and the methods for statistical analyzing them and drawing graphics by using MSChart component were introduced. The programming ideas involved in this paper has a certain reference for the analysis and processing of meteorological data.

        observational data; C# technology; multithreading; abstract classes; MSChart component

        1003-6598(2016)01-0045-05

        2015-05-29

        王長(zhǎng)利(1971—),男,工程師,主要從事氣象信息自動(dòng)化工作,E-mail:yywcl@xinhuanet.com。

        P466

        B

        猜你喜歡
        整理氣象解析
        氣象
        氣象樹
        三角函數(shù)解析式中ω的幾種求法
        《內(nèi)蒙古氣象》征稿簡(jiǎn)則
        大國氣象
        睡夢(mèng)解析儀
        電競(jìng)初解析
        商周刊(2017年12期)2017-06-22 12:02:01
        相機(jī)解析
        高一零碎知識(shí)整理
        整理歸納中漸次堅(jiān)實(shí)
        亚洲ⅤA中文字幕无码| 午夜理论片yy44880影院| 亚洲av无码av制服丝袜在线| 精品视频在线观看免费无码| 国产噜噜亚洲av一二三区| 白浆国产精品一区二区| 中文字幕乱偷无码av先锋蜜桃| 国产乱妇无码大片在线观看| 人人玩人人添人人澡| 精品少妇人妻成人一区二区| 亚洲av极品尤物不卡在线观看| 天天躁夜夜躁狠狠是什么心态| 日韩成人极品在线内射3p蜜臀| 欧美激情中文字幕在线一区二区| 偷拍一区二区三区黄片| 少妇性l交大片7724com| 中文字幕日韩一区二区三区不卡 | 国产女人高潮视频在线观看| 亚洲熟妇在线视频观看| 女女同性av一区二区三区| 无码少妇丰满熟妇一区二区| 欧洲极品少妇| 亚洲一区日韩无码| 成人午夜视频在线观看高清| 国产一区二区三区av免费| 成人精品视频一区二区三区尤物 | 中文字幕乱码亚洲在线| 国产精品爽爽v在线观看无码| 波多野结衣国产一区二区三区| 风韵丰满妇啪啪区老老熟女杏吧| 国产亚洲精品97在线视频一| 人成午夜免费视频无码| 精品一区二区三区无码视频| 国产精品每日更新在线观看 | 亚洲精品国产精品系列| 草草影院ccyy国产日本欧美| 中日韩精品视频在线观看| 一本一道AⅤ无码中文字幕| 日本免费精品一区二区| 亚洲娇小与黑人巨大交| 国产爆乳无码一区二区在线|