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

        ?

        公眾氣象服務(wù)產(chǎn)品平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)

        2023-06-15 01:03:34鄭文全肖鵬王英
        計(jì)算機(jī)時(shí)代 2023年6期
        關(guān)鍵詞:線(xiàn)程委托

        鄭文全 肖鵬 王英

        摘? 要: 為了提高公眾氣象服務(wù)產(chǎn)品制作效率,以天氣網(wǎng)等網(wǎng)站數(shù)據(jù)為基礎(chǔ),結(jié)合預(yù)報(bào)值班人員本地化訂正,使用Visual Basic.Net設(shè)計(jì)了批量生成公眾氣象服務(wù)產(chǎn)品的制作平臺(tái)。該平臺(tái)具有集中顯示、對(duì)比訂正、批量制作、信息查詢(xún)等功能,提高了值班人員氣象工作效率。

        關(guān)鍵詞: 公眾氣象服務(wù); VB; .Net; 正則表達(dá)式; 線(xiàn)程; 委托

        中圖分類(lèi)號(hào):TP317.1? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ?文章編號(hào):1006-8228(2023)06-157-05

        Design and implementation of public meteorological service product platform

        Zheng Wenquan1, Xiao Peng1, Wang Ying2

        (1. Dazhou Meteorological Bureau, Dazhou, Sichuan 635000, China; 2. Dazhou Quxian Meteorological Bureau)

        Abstract: In order to improve the production efficiency of public meteorological service products, based on the data of websites such as weather.com.cn, combined with the localized correction by forecast duty personnel, a production platform for batch generation of public meteorological service products is designed using Visual Basic.Net. The platform has functions such as centralized display, comparison and correction, batch production, and information query, which improves the meteorological work efficiency of duty personnel.

        Key words: public meteorological service; VB; .Net; regular expression; threads; delegation

        0 引言

        公眾氣象服務(wù)[1]是氣象服務(wù)系統(tǒng)及時(shí)地為社會(huì)各界各部門(mén)指揮生產(chǎn)、組織防災(zāi)減災(zāi),以及在氣候資源合理開(kāi)發(fā)利用和環(huán)境保護(hù)等方面進(jìn)行科學(xué)決策提供氣象信息。公眾氣象服務(wù)產(chǎn)品包括天氣預(yù)報(bào)警報(bào)、氣候服務(wù)、環(huán)境質(zhì)量預(yù)報(bào)以及氣象科普等,本文主要指日常例行制作的公眾生活、工作、出行、旅游、健康等多種公眾氣象服務(wù)產(chǎn)品(以下簡(jiǎn)稱(chēng)產(chǎn)品),產(chǎn)品包括48/72小時(shí)等天氣預(yù)報(bào)、生活氣象指數(shù)、旅游風(fēng)景區(qū)預(yù)報(bào)、鐵路/高速公路氣象服務(wù)、電視天氣預(yù)報(bào)等多個(gè)產(chǎn)品。氣象值班人員每日按時(shí)制作對(duì)應(yīng)產(chǎn)品,由于產(chǎn)品數(shù)量多,且產(chǎn)品使用的氣象預(yù)報(bào)數(shù)據(jù)(指溫度、天氣現(xiàn)象、生活氣象指數(shù)等,以下簡(jiǎn)稱(chēng)數(shù)據(jù))多,往往制作產(chǎn)品費(fèi)時(shí)費(fèi)力,人工出錯(cuò)概率大,牽制了值班人員大量精力,迫切需要開(kāi)發(fā)一套方便快捷的產(chǎn)品制作平臺(tái)(以下簡(jiǎn)稱(chēng)平臺(tái))。

        1 制作設(shè)計(jì)

        本平臺(tái)由Visual Basic.Net 2015(基于微軟.NET Framework之上的面向?qū)ο蟮木幊陶Z(yǔ)言,以下簡(jiǎn)稱(chēng)VB.Net)在Windows10下編寫(xiě),在Windows7/10及Word2010/2016調(diào)試通過(guò)。

        1.1 框架

        平臺(tái)從天氣網(wǎng)以及達(dá)州市公共氣象服務(wù)網(wǎng)收集基礎(chǔ)數(shù)據(jù),值班人員對(duì)其進(jìn)行本地化訂正,形成最終數(shù)據(jù)。再由設(shè)計(jì)好的Word模板產(chǎn)品,批量生成多個(gè)最終Word產(chǎn)品(圖1)?;A(chǔ)數(shù)據(jù)僅為值班員提供種類(lèi)豐富的數(shù)據(jù)來(lái)源,以及方便訂正的錨定值。

        1.2 數(shù)據(jù)存儲(chǔ)

        基礎(chǔ)數(shù)據(jù)的收集遵循前瞻性、盡量多全的原則,如,本市、縣、區(qū)、鄉(xiāng)鎮(zhèn)、景區(qū),周邊市及景區(qū)等1~15天多個(gè)數(shù)據(jù)。所有數(shù)據(jù)存儲(chǔ)在兩個(gè)公共數(shù)組變量DzWeather和LifeIndex中。

        三維數(shù)組變量DzWeather(56,7,22)存儲(chǔ)天氣網(wǎng)上的數(shù)據(jù)(表1)。站號(hào)50~56單獨(dú)收集天氣網(wǎng)8~15天數(shù)據(jù)。例:DzWeather(6,7,2)為渠縣第六天最高溫度,DzWeather(56,0,2)為渠縣第七天最高溫度。

        二維數(shù)組變量LifeIndex(14,3)存儲(chǔ)達(dá)州市公共氣象服務(wù)網(wǎng)上的14個(gè)生活氣象指數(shù),分別對(duì)應(yīng)指數(shù)名稱(chēng)、等級(jí)及描述,專(zhuān)為“城區(qū)生活出行天氣預(yù)報(bào)”產(chǎn)品提供指數(shù)選用。

        1.3 文件和目錄

        程序當(dāng)前目錄下“0配置文件”文件夾,放置設(shè)計(jì)好的Word產(chǎn)品模板,以及預(yù)報(bào)員、天氣現(xiàn)象等配置文本文件;同時(shí),產(chǎn)品目錄按年份名每年自動(dòng)建立,存儲(chǔ)具體產(chǎn)品。該目錄設(shè)置只讀共享便于他人查詢(xún)。

        Word產(chǎn)品模板有:48/72小時(shí)天氣預(yù)報(bào)、城區(qū)生活出行天氣預(yù)報(bào)、旅游風(fēng)景區(qū)天氣預(yù)報(bào)、鐵路/公路氣象服務(wù)等共14個(gè)產(chǎn)品。Word模板用隱形(無(wú)框線(xiàn))或顯形的表格固定位置及格式,或用特別字串占位(如,YYYY,xxx等),便于程序用替換或單元格填充完成數(shù)據(jù)更新。例如,Word產(chǎn)品版頭[2]部分表格(隱形表格)里的預(yù)報(bào)員、簽發(fā)人、日期等,程序控制單元格填充數(shù)據(jù)。產(chǎn)品按“產(chǎn)品名_制作日期_期數(shù)”進(jìn)行命名,方便查詢(xún)使用。例,2022年12月2日周末天氣預(yù)報(bào)(每周五制作)命名為“周末天氣預(yù)報(bào)_20221202_048.docx”。

        2 程序?qū)崿F(xiàn)

        2.1 程序流程

        程序啟動(dòng)加載窗體時(shí)(圖2),進(jìn)行初始化:表格(圖3中名為dgvD的DataGridView控件,以下“表格”均指此控件)格式化,檢查配置文件(無(wú)則自動(dòng)生成初始配置),加載預(yù)報(bào)員、簽發(fā)人、天氣現(xiàn)象等選項(xiàng)數(shù)據(jù),重置7天切換按鈕,檢查產(chǎn)品生成目錄等等。

        點(diǎn)擊“讀取”檢查預(yù)報(bào)員與簽發(fā)人后,讀取多個(gè)站點(diǎn)的網(wǎng)頁(yè)源碼,分別提取網(wǎng)頁(yè)源碼中的數(shù)據(jù),存儲(chǔ)到公共數(shù)組變量中(見(jiàn)1.2)。切換圖3表格下面的7天按鍵,分別顯示各日數(shù)據(jù)。值班員逐一訂正修改后,可一鍵輸出到Word,形成最終的多個(gè)產(chǎn)品。

        2.2 數(shù)據(jù)獲取

        使用統(tǒng)一的網(wǎng)頁(yè)源碼獲取過(guò)程,分別提取各個(gè)站號(hào)網(wǎng)頁(yè)中的數(shù)據(jù)。例,獲取達(dá)州(站號(hào)為10)數(shù)據(jù):GetSiteData("http://www.weather.com.cn/weathern/101270601.shtml", 10, "達(dá)州"),代碼如下:

        Private Sub GetSiteData(ByVal url, ByVal num, ByVal site) '網(wǎng)址,站號(hào),站名

        mythread=New Thread(AddressOf GetCode) '新建線(xiàn)程

        mythread.Start(url)

        Do

        System.Windows.Forms.Application.DoEvents()

        '等待完成

        Loop Until mythread.IsAlive=False

        GetElem(strCode, num) '正則提取

        End Sub

        由于網(wǎng)頁(yè)源碼獲取是異步[3],且多個(gè)網(wǎng)站連續(xù)讀取容易造成主線(xiàn)程“假死”現(xiàn)象[4],故上面代碼使用了線(xiàn)程[5]和等待。線(xiàn)程中獲取網(wǎng)頁(yè)源碼的程序代碼:

        Private Sub GetCode(ByVal web As String)

        Dim wc As New WebClient

        Try

        Invoke(New voidShowMessage(AddressOf

        ShowMessage), "請(qǐng)求源碼中...")

        wc.Proxy=Nothing

        strCode=Encoding.UTF8.GetString

        (wc.DownloadData(web))

        Catch ex As Exception

        Invoke(New voidShowMessage(AddressOf

        ShowMessage), ex.Message)

        strCode = ""

        End Try

        ‘失敗時(shí)狀態(tài)信息,代碼略

        Invoke(New voidShowMessage(AddressOf

        ShowMessage), "獲取源碼成功!")委托

        wc.Dispose()

        wc=Nothing

        mythread.Abort()

        End Sub

        線(xiàn)程中獲取源碼的狀態(tài)信息,是無(wú)法直接顯示在主線(xiàn)程窗體。因此在新建線(xiàn)程的代碼中使用了委托[6]。委托需在類(lèi)中定義Private Delegate Sub voidShowMessage(ByVal strM As String),這樣圖3表格下面可即時(shí)顯示線(xiàn)程進(jìn)行狀態(tài)。

        Private Sub ShowMessage(ByVal s As String)

        lblState.Text="狀態(tài):" & s

        End Sub

        源碼獲取成功后,用正則表達(dá)式[7]解析對(duì)應(yīng)的數(shù)據(jù),存儲(chǔ)到公共數(shù)組變量中,部分代碼:

        Private Sub GetElem(ByVal strCode_All As String,

        ByVal dz As Integer)

        Dim strT() As String, m As Integer, k As Integer,

        i As Integer

        Dim reg As New Regex("blueFor-container.*?

        click_wrap", RegexOptions.Singleline)

        m=reg.Matches(strCode_All).Count

        If m<1 Then

        lblState.Text="狀態(tài):網(wǎng)頁(yè)中無(wú)數(shù)據(jù),請(qǐng)查找原因如網(wǎng)頁(yè)改版!"

        Exit Sub

        End If

        strCode=reg.Matches(strCode_All)(0).Value

        lblState.Text="狀態(tài):提取" & dz & "區(qū)域日期..."

        reg=New Regex("(?<=""date"">).*?(?=

        )", RegexOptions.Singleline)'讀取日期8

        m = reg.Matches(strCode).Count

        If reg.Matches(strCode).Count <> 8 Then

        lblState.Text="狀態(tài):數(shù)據(jù)異常(不是7天數(shù)據(jù)),請(qǐng)查找原因!"

        Exit Sub

        End If

        For k=0 To m - 1

        DzWeather(dz, k, 0) = reg.Matches(strCode)(k)

        .Value.Replace(vbCrLf, "")

        Next

        ‘提取天氣現(xiàn)象、最高溫度、最低溫度、風(fēng)、生活氣象指數(shù)等類(lèi)似,略

        End Sub

        景區(qū)與達(dá)州市公共氣象服務(wù)網(wǎng)的網(wǎng)頁(yè)源碼各不相同,另寫(xiě)過(guò)程修改正則匹配字串即可。

        2.3 修改訂正

        2.3.1 數(shù)據(jù)顯示

        7天數(shù)據(jù)顯示由表格下面d1~d7共七個(gè)按鍵進(jìn)行切換。圖3為第五天(2023年1月)10日數(shù)據(jù),程序代碼:

        Private Sub d5_Click(senderAs Object, e As

        EventArgs) Handles d5.Click

        cboWeather.Visible=False? '隱藏天氣現(xiàn)象ComboBox

        cboWeather.Width=0

        SaveArry()? '存儲(chǔ)當(dāng)前數(shù)據(jù)

        intDay=5 '第五天

        LoadToTable(intDay) '第五天數(shù)據(jù)入表

        Rest7Back() '七個(gè)按鍵背景重置

        D5.BackColor=Color.LightBlue

        End Sub

        按鍵切換時(shí),保存當(dāng)前修改的數(shù)據(jù)到公共數(shù)組變量,之后調(diào)入對(duì)應(yīng)按鍵日期的數(shù)據(jù)在表格顯示,注意第七天數(shù)據(jù)的站點(diǎn)變成了50+的處理(見(jiàn)1.2)。

        2.3.2 訂正修改

        值班員對(duì)基礎(chǔ)數(shù)據(jù)的本地化修改訂正,提供了三種方式。①直接雙擊表格中單元格,即可進(jìn)行編輯修改。②選擇其中一個(gè)數(shù)據(jù),點(diǎn)擊“行數(shù)據(jù)相同”使同行的所有數(shù)據(jù)將變成一樣,方便對(duì)比微調(diào)修改。③針對(duì)表格第一行天氣現(xiàn)象進(jìn)行下拉選項(xiàng)修改。添加一個(gè)cboWeather(為ComboBox控件),平時(shí)隱藏。點(diǎn)擊第一行天氣現(xiàn)象時(shí)激活顯示(圖3右側(cè)),選擇其中天氣現(xiàn)象完成修改。焦點(diǎn)離開(kāi)第一行自動(dòng)隱藏。

        Private Sub DV_CurrentCellChanged(……) Handles

        dgvD.CurrentCellChanged

        Dim x As Integer=dgvD.CurrentCell.RowIndex '行

        Dim y As Integer=dgvD.CurrentCell.ColumnIndex '列

        If x=0 Then'僅對(duì)第一行定位顯示,除此外隱藏

        If y>0 And y<8 Then '僅限達(dá)州更改,預(yù)留擴(kuò)展

        cboWeather.Visible=False

        cboWeather.Width=0

        cboWeather.Left=dgvD.Location.X+dgvD

        .GetCellDisplayRectangle(y, x, True).Left

        cboWeather.Top=dgvD.Location.Y + dgvD

        .GetCellDisplayRectangle(y, x, True).Top

        cboWeather.Width=dgvD.GetCellDisplayRectangle

        (y, x, True).Width

        cboWeather.Height=dgvD.GetCellDisplayRectangle

        (y, x, True).Height

        cboWeather.Text=dgvD.CurrentCell.Value

        cboWeather.Visible=True

        End If

        Else

        cboWeather.Visible=False

        cboWeather.Width=0

        End If

        End Sub

        當(dāng)對(duì)cboWeather修改時(shí),應(yīng)及時(shí)更新到表格,其他修改方式類(lèi)似。

        Private Sub cboWeather_SelectedValueChanged(……)

        Handles cboWeather.SelectedValueChanged

        dgvD.CurrentCell.Value=cboWeather.Text

        End Sub

        2.4 生成產(chǎn)品

        所有數(shù)據(jù)人工訂正完畢后,點(diǎn)擊“輸出到Word”,形成最終產(chǎn)品。其中景區(qū)與鄉(xiāng)鎮(zhèn)的數(shù)據(jù),可以由主站(表1一維0~6站號(hào))根據(jù)現(xiàn)有的已經(jīng)研究出的鄉(xiāng)鎮(zhèn)/景區(qū)預(yù)報(bào)訂正模型,由程序在內(nèi)部做自動(dòng)訂正,無(wú)須人工修改。

        VB.Net操作Word前,需引用“Microsoft Word 16.0 Object Library”類(lèi)庫(kù)[8]。每個(gè)產(chǎn)品的制作編寫(xiě)一個(gè)處理過(guò)程,逐個(gè)調(diào)用完成所有產(chǎn)品制作。以數(shù)據(jù)量較少的48小時(shí)分縣天氣預(yù)報(bào)產(chǎn)品為例,使用替換及單元格填充,過(guò)程代碼:

        Private Sub Hour48Forecast() '內(nèi)含兩個(gè)表,版頭隱形表

        為tables(1),正文中顯形表為tables(2)

        Dim strFile As String = strPath & "0配置模板\=

        48小時(shí)分縣天氣預(yù)報(bào).docx" '使用模板

        Dim w As New Application, i As Integer

        Dim d As Document=w.Documents.Open(strFile)

        Dim intNum As Integer=Now.DayOfYear '期數(shù),每天一期

        FillHeader(d, intNum.ToString("000")) '產(chǎn)品版頭填充

        For i = 0 To 6‘站號(hào)0~6

        d.Tables(2).Cell(3 + i, 2).Range.Text=DzWeather

        (i, 2, 1) '24小時(shí)天氣現(xiàn)象

        d.Tables(2).Cell(3 + i, 3).Range.Text=DzWeather

        (i, 2, 3) & "~" & DzWeather(i, 2, 2) '溫度

        d.Tables(2).Cell(3 + i, 4).Range.Text=DzWeather

        (i, 3, 1) ‘48小時(shí)

        d.Tables(2).Cell(3 + i, 5).Range.Text=DzWeather

        (i, 3, 3) & "~" & DzWeather(i, 3, 2)

        Next

        d.SaveAs(strYear & "\常規(guī)服務(wù)產(chǎn)品\48小時(shí)分縣天氣

        預(yù)報(bào)_" & Now.ToString("yyyyMMdd_") & intNum.ToString("000") & ".docx")? '另存,產(chǎn)品輸出

        d.Close()

        w.Quit()

        w=Nothing

        End Sub

        各產(chǎn)品的版頭是一致的,單獨(dú)用一個(gè)過(guò)程來(lái)處理。

        Private Sub FillHeader(ByVal d As Document, ByVal

        num As String) '填充版頭

        d.Range.Find.Execute("YYYY",,,,,,,,, Now.Year

        .ToString, WdReplace.wdReplaceAll) '年

        d.Range.Find.Execute("xxx",,,,,,,,, num, WdReplace

        .wdReplaceAll) '期數(shù),替換字串xxx

        d.Tables(1).Cell(1, 3).Range.Text=cbYby.Text? '預(yù)報(bào)員,

        隱形表格中的單元格(見(jiàn)1.3)

        d.Tables(1).Cell(2, 3).Range.Text=cbQfr.Text? '簽發(fā)人

        d.Tables(1).Cell(1, 4).Range.Text=Format(Now,"yyyy年

        MM月dd日HH時(shí)") '時(shí)間

        End Sub

        3 結(jié)束語(yǔ)

        本平臺(tái)經(jīng)過(guò)四年的使用已經(jīng)較為成熟,產(chǎn)品制作時(shí)間由原手工二小時(shí)左右縮短成平臺(tái)制作八分鐘左右,有效地節(jié)約了時(shí)間;方便數(shù)據(jù)對(duì)比校對(duì),減少了輸入失誤,提高了氣象工作效率,是值班人員工作的好幫手。幾年來(lái),產(chǎn)品經(jīng)歷多次新增和變更,但因平臺(tái)模塊化設(shè)計(jì)及前瞻性考慮,使得平臺(tái)維護(hù)只須幾分鐘即可迅速滿(mǎn)足業(yè)務(wù)需求。

        本平臺(tái)適合市、縣級(jí)公共氣象服務(wù)產(chǎn)品的自動(dòng)化制作,成本低廉、部署簡(jiǎn)單、移植方便。未來(lái),根據(jù)需求還可利用Excel、Surfer、插件等增加圖表功能,實(shí)現(xiàn)數(shù)據(jù)的可視化。

        參考文獻(xiàn)(References):

        [1] 劉艷華,白鈺,隋紅艷,等.淺談如何寫(xiě)好省級(jí)公眾天氣形勢(shì)

        服務(wù)信息[J].黑龍江氣象,2021,38(2):34-36

        [2] 韓亮.信息化的公文格式管理中常見(jiàn)問(wèn)題分析及解決措施[J].

        信息記錄材料,2017,18(7):111-112

        [3] 紀(jì)銘涵,齊林,張楊,等.面向異步機(jī)制的自動(dòng)重構(gòu)方法研究[J].

        河北科技大學(xué)學(xué)報(bào),2021,42(5):499-507

        [4] 周嵐.多線(xiàn)程在WinForm窗體開(kāi)發(fā)中的應(yīng)用研究[J].軟件

        工程,2017,20(3):21-23

        [5] H.M.Deitel,P.J.Deitel,T.R.Nieto(美).Visual Basic.NET程序

        設(shè)計(jì)專(zhuān)家指南[M].北京:機(jī)械工業(yè)出版社,2003:520-557

        [6] Francesco Balena(意).Visual Basic 2005技術(shù)內(nèi)幕[M].北京:

        清華大學(xué)出版社,2006:229-236

        [7] Francosis Liger,Craig McQueen,Paul Wilto(美).VB.NET

        字符串和正則表達(dá)式[M].北京:清華大學(xué)出版社,2002:118-14

        [8] 唐云婷.基于.NET技術(shù)的文檔自動(dòng)化處理研究[J].黑龍江

        科學(xué),2021,12(10):26-27,31

        猜你喜歡
        線(xiàn)程委托
        淺談linux多線(xiàn)程協(xié)作
        績(jī)效評(píng)價(jià)在委托管理酒店中的應(yīng)用
        新聞前哨(2016年1期)2016-12-01 06:18:04
        治理現(xiàn)代化:委托制下的權(quán)力清單制
        招標(biāo)代理中的授權(quán)委托——以案說(shuō)法
        委托理財(cái)忌保底 投資風(fēng)險(xiǎn)需自負(fù)
        浙江人大(2014年1期)2014-03-20 16:20:03
        Linux線(xiàn)程實(shí)現(xiàn)技術(shù)研究
        么移動(dòng)中間件線(xiàn)程池并發(fā)機(jī)制優(yōu)化改進(jìn)
        JAVA多線(xiàn)程同步解決生產(chǎn)者—消費(fèi)者問(wèn)題
        日韩美女人妻一区二区三区| 色视频网站一区二区三区| 亚洲第一狼人天堂网亚洲av| 日韩av无码中文无码电影| 日韩a无v码在线播放| 成 人 网 站 在线 看 免费| 亚洲日韩国产精品不卡一区在线| 色视频不卡一区二区三区 | 男女后入式在线观看视频| 国产在线一区二区三区四区| 99国产精品无码| 国产精品三级一区二区按摩| 一区两区三区视频在线观看| 色婷婷精品久久二区二区蜜桃| 中文字幕亚洲乱码熟女在线| 国产精品高潮无码毛片| 亚洲国产中文字幕九色| 69国产成人精品午夜福中文| 无码精品人妻一区二区三区av| 激情内射亚洲一区二区三区爱妻 | 音影先锋色天堂av电影妓女久久| 亚洲精品中文字幕乱码无线| 国产av夜夜欢一区二区三区| 一二三四在线视频社区3| 国产成人精品曰本亚洲| 少妇我被躁爽到高潮在线影片| 久久99天堂av亚洲av| 国产精品欧美一区二区三区不卡| 久久精品这里只有精品| 免费人成视频网站在线| 国产精品一区二区熟女不卡| 国产后入又长又硬| 国产又色又爽又刺激视频| 五月激情在线观看视频| 综合五月激情二区视频| 人人妻人人玩人人澡人人爽| 国产黄色精品高潮播放| 肥老熟女性强欲五十路| 无码国产精品一区二区高潮| 亚洲AV乱码毛片在线播放| 人妻中文字幕一区二区三区|