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

        ?

        航標(biāo)位置自動(dòng)校核系統(tǒng)中航標(biāo)數(shù)據(jù)解析算法的運(yùn)用

        2016-10-21 06:04:11龔燕峰
        電子技術(shù)與軟件工程 2016年5期
        關(guān)鍵詞:堆棧數(shù)據(jù)庫(kù)

        龔燕峰

        摘 要 利用C++編程技術(shù)采用堆棧數(shù)據(jù)結(jié)構(gòu)將從遠(yuǎn)程數(shù)據(jù)庫(kù)獲取到的原始航標(biāo)數(shù)據(jù)進(jìn)行解析處理,使得符合整個(gè)航標(biāo)位置準(zhǔn)確性自動(dòng)校核系統(tǒng)的數(shù)據(jù)格式要求,并進(jìn)一步將解析出來(lái)的航標(biāo)數(shù)據(jù)存入指定的數(shù)據(jù)庫(kù),以備后期對(duì)航標(biāo)位置復(fù)核時(shí)使用。航標(biāo)數(shù)據(jù)的解析工作是整個(gè)航標(biāo)位置自動(dòng)校核系統(tǒng)運(yùn)行的開(kāi)端,也是系統(tǒng)得以運(yùn)行的基礎(chǔ)。

        【關(guān)鍵詞】C++ 堆棧 數(shù)據(jù)解析 數(shù)據(jù)庫(kù)

        本文在長(zhǎng)江重慶航道局航標(biāo)位置自動(dòng)校核系統(tǒng)項(xiàng)目的基礎(chǔ)上進(jìn)行論述的,其中原始航標(biāo)數(shù)據(jù)的解析是整個(gè)航標(biāo)位置自動(dòng)校核系統(tǒng)項(xiàng)目的開(kāi)端和進(jìn)行項(xiàng)目其它階段的基礎(chǔ),同時(shí)也是整個(gè)系統(tǒng)項(xiàng)目的核心環(huán)節(jié),如何高效率的將從航標(biāo)遙測(cè)遙控系統(tǒng)獲得的原始航標(biāo)數(shù)據(jù)解析成系統(tǒng)項(xiàng)目中能直接使用的數(shù)據(jù)非常重要。

        本項(xiàng)目軟件系統(tǒng)通過(guò)SoapClient遠(yuǎn)程訪問(wèn)航標(biāo)遙測(cè)遙控系統(tǒng),并通過(guò)航標(biāo)遙測(cè)遙控管理軟件系統(tǒng)間接地從后臺(tái)數(shù)據(jù)庫(kù)獲取航標(biāo)的數(shù)據(jù)。

        1 原始航標(biāo)數(shù)據(jù)的解析

        上述獲取到的有關(guān)航標(biāo)的數(shù)據(jù)暫時(shí)保存在一個(gè)文檔中,初步獲取的保存在這個(gè)文檔中的數(shù)據(jù)還不能直接在項(xiàng)目的軟件中使用,因此必須對(duì)這些數(shù)據(jù)做進(jìn)一步解析處理,在航標(biāo)數(shù)據(jù)的解析工作中我們采用了順序棧。

        順序棧的類(lèi)定義中各成員變量和成員函數(shù)的含義:

        m_pBuffer:為指向棧元素的數(shù)組的頭指針;

        m_pTop和m_pBottom:分別指向棧頂和棧底;

        IsFull()成員函數(shù):用來(lái)判斷棧中元素是否已經(jīng)滿了;

        GetSize()成員函數(shù):用來(lái)獲取棧中元素的個(gè)數(shù),隨著新元素的進(jìn)棧和棧頂元素的出棧,在需要的時(shí)候需重新調(diào)用GetSize()成員函數(shù);

        push(T element)成員函數(shù):用來(lái)將新元素寫(xiě)入棧;

        pop(T& element)成員函數(shù):用來(lái)從棧中取出元素。

        圖1是整個(gè)航標(biāo)數(shù)據(jù)解析算法的流程圖,pChar為指向存有初始航標(biāo)數(shù)據(jù)的拷貝字符數(shù)組的指針。

        1.1 讀出原數(shù)據(jù)并獲得其副本

        利用文件操作函數(shù)fopen打開(kāi)之前保存了航標(biāo)數(shù)據(jù)的文本文檔,將航標(biāo)數(shù)據(jù)讀出到自定義的字符數(shù)組中,其中,全局函數(shù)GetModuleFileName(),用于獲取工程當(dāng)前目錄;在使用那個(gè)保存有航標(biāo)數(shù)據(jù)的字符數(shù)組前,先利用memcpy()函數(shù)獲得原數(shù)據(jù)的一個(gè)拷貝,以保證原數(shù)據(jù)的最終不被修改的原則,進(jìn)行數(shù)據(jù)拷貝前還需先將自定義的拷貝數(shù)組的內(nèi)存進(jìn)行清零操作,在此,用到了memset()函數(shù),為了保證拷貝數(shù)據(jù)的完整性,使用了多線程中的線程同步機(jī)制,具體采用了事件對(duì)象的線程同步方法,使得原數(shù)據(jù)在拷貝的過(guò)程中不被打斷。

        1.2 解析數(shù)據(jù)

        準(zhǔn)備工作做好后,開(kāi)始進(jìn)入數(shù)據(jù)的核心解析工作了,本文主要利用一個(gè)大的while循環(huán)和堆棧來(lái)進(jìn)行,循環(huán)條件是判斷一個(gè)指向待解析數(shù)據(jù)的字符指針是否為空,只要不為空,則循環(huán)繼續(xù)。在整個(gè)while循環(huán)里再利用一個(gè)if...else...選擇結(jié)構(gòu)具體判斷指針?biāo)赶虻淖址麨槟姆N類(lèi)型,在else語(yǔ)句塊中,若所指向的字符不為“,”或“}”,則將字符數(shù)據(jù)存入棧中,直至遇到“,”或“}”字符,這意味著某個(gè)數(shù)據(jù)項(xiàng)或數(shù)據(jù)元素的結(jié)束,此時(shí), if語(yǔ)句的執(zhí)行主體要完成數(shù)據(jù)項(xiàng)和數(shù)據(jù)元素的讀取和儲(chǔ)存工作,每執(zhí)行完這樣一個(gè)if語(yǔ)句主體便意味著一個(gè)航標(biāo)的特性數(shù)據(jù)項(xiàng)或一整個(gè)航標(biāo)的數(shù)據(jù)元素解析工作完成了。由于每個(gè)航標(biāo)數(shù)據(jù)元素包括很多子元素,如:航標(biāo)的經(jīng)度、緯度等,因此,在if語(yǔ)句主體中,通過(guò)其他的結(jié)構(gòu)具體完成子元素的解析工作,主要采用了幾個(gè)while和for循環(huán)結(jié)構(gòu),同時(shí),由于子元素又包含兩個(gè)數(shù)據(jù)項(xiàng),將它們分別命名為數(shù)據(jù)項(xiàng)名和數(shù)據(jù)項(xiàng)值,只有分別完成了數(shù)據(jù)項(xiàng)名和數(shù)據(jù)項(xiàng)值的解析才算完成了一個(gè)子元素的解析工作。

        數(shù)據(jù)項(xiàng)值的解析:

        經(jīng)過(guò)最初的while大循環(huán),代表數(shù)據(jù)項(xiàng)值的原始數(shù)據(jù)已被保存在棧中,為了解析它,需通過(guò)另一個(gè)while循環(huán)逐個(gè)將其從棧中取出進(jìn)行判斷,只要棧非空,取出的字符非“"”并且非“:”,則將此字符存入一個(gè)字符數(shù)組中,循環(huán)結(jié)束后便完成了一個(gè)數(shù)據(jù)項(xiàng)值的解析。

        數(shù)據(jù)項(xiàng)名的解析:

        與數(shù)據(jù)項(xiàng)值相同,經(jīng)過(guò)最初的while大循環(huán),代表數(shù)據(jù)項(xiàng)名的原始數(shù)據(jù)已被保存在棧中,此時(shí),通過(guò)另外一個(gè)while循環(huán)繼續(xù)從棧中取出數(shù)據(jù)進(jìn)行判斷,只要棧非空并且取出的字符非“"”,則將此字符存入一個(gè)字符數(shù)組中,循環(huán)結(jié)束后便完成了一個(gè)數(shù)據(jù)項(xiàng)名的解析。

        對(duì)數(shù)據(jù)項(xiàng)的解析工作完成后,即可將一個(gè)子元素保存在一個(gè)BEACON類(lèi)型的結(jié)構(gòu)中,此過(guò)程中采用了另一個(gè)if...else...結(jié)構(gòu),以strcmp()函數(shù)的返回值作為判斷條件,將與指定的數(shù)據(jù)項(xiàng)名匹配的數(shù)據(jù)項(xiàng)值依次保存在BEACON結(jié)構(gòu)對(duì)應(yīng)的成員中。完成某個(gè)數(shù)據(jù)項(xiàng)值的保存后繼續(xù)利用其它if語(yǔ)句判斷指向原數(shù)據(jù)的字符指針的內(nèi)容是否為“}”(因?yàn)椤皚”意味著原數(shù)據(jù)中一個(gè)航標(biāo)數(shù)據(jù)元素的結(jié)束),若為“}”,則將此時(shí)的BEACON結(jié)構(gòu)保存的數(shù)據(jù)寫(xiě)入到數(shù)據(jù)庫(kù)中,至此,航標(biāo)數(shù)據(jù)的一個(gè)解析循環(huán)工作結(jié)束。

        2 總結(jié)

        本文詳述了在航標(biāo)位置自動(dòng)校核系統(tǒng)中對(duì)航標(biāo)數(shù)據(jù)的解析算法的運(yùn)用。首先利用Soap Client 客戶端通過(guò)航標(biāo)遙測(cè)遙控軟件管理系統(tǒng)遠(yuǎn)程獲取航道局航標(biāo)數(shù)據(jù)庫(kù)的航標(biāo)數(shù)據(jù),并使用堆棧數(shù)據(jù)結(jié)構(gòu)和C++編程技術(shù)將獲取到的原始航標(biāo)數(shù)據(jù)進(jìn)行解析,使其成為符合本系統(tǒng)規(guī)范的數(shù)據(jù)格式要求,并最后實(shí)現(xiàn)了將其存儲(chǔ)到本地?cái)?shù)據(jù)庫(kù)以備用。為整個(gè)航標(biāo)位置自動(dòng)校核系統(tǒng)的成功運(yùn)行提供了必要的數(shù)據(jù)基礎(chǔ)。

        參考文獻(xiàn)

        [1]David J.Kruglinski著,潘愛(ài)民,王國(guó)印譯.Visual C++ 技術(shù)內(nèi)幕[M].北京:清華大學(xué)出版社,2002.

        [2]長(zhǎng)江航道局,長(zhǎng)江干線航標(biāo)配布研究[Z]. 武漢:長(zhǎng)江航道局,2004.

        作者單位

        重慶交通大學(xué)交通運(yùn)輸學(xué)院 重慶市 400074

        猜你喜歡
        堆棧數(shù)據(jù)庫(kù)
        基于行為監(jiān)測(cè)的嵌入式操作系統(tǒng)堆棧溢出測(cè)試*
        嵌入式軟件堆棧溢出的動(dòng)態(tài)檢測(cè)方案設(shè)計(jì)*
        基于堆棧自編碼降維的武器裝備體系效能預(yù)測(cè)
        數(shù)據(jù)庫(kù)
        數(shù)據(jù)庫(kù)
        數(shù)據(jù)庫(kù)
        數(shù)據(jù)庫(kù)
        數(shù)據(jù)庫(kù)
        一種用于分析MCS-51目標(biāo)碼堆棧深度的方法
        數(shù)據(jù)庫(kù)
        麻婆视频在线免费观看| 成人毛片18女人毛片免费| 久久久久国产精品片区无码| 黄片一级二级三级四级| 国产精华液一区二区三区| 色综合久久88色综合天天| 国产一区二区三区在线观看精品| 成在线人免费无码高潮喷水| 中文乱码字幕在线亚洲av| 白丝爆浆18禁一区二区三区| 狼色精品人妻在线视频| 人妻少妇一区二区三区| 能看不卡视频网站在线| 无码国内精品人妻少妇蜜桃视频 | 国产无遮挡又黄又爽在线视频 | 久久夜色精品国产九色| 女色av少妇一区二区三区| 国产午夜福利100集发布| 久久久亚洲经典视频| 国产一区二区免费在线观看视频| 亚洲av精二区三区日韩| 久久精品免视看国产成人| 久久精品亚洲中文无东京热| av网站韩日在线观看免费 | 亚洲色成人网站www永久四虎| 欧美a视频在线观看| 亚洲图文一区二区三区四区| 国产精品高清网站| 午夜dj在线观看免费视频| 国产在线天堂av| 国内偷拍国内精品多白86| 日产学生妹在线观看| 午夜毛片午夜女人喷潮视频| 日本高清一区二区三区不卡| 久久久久久av无码免费网站下载 | 色小姐在线视频中文字幕| 欧洲女人与公拘交酡视频| 亚洲男人第一av网站| 亚洲毛片av一区二区三区| 91超精品碰国产在线观看| 老师翘臀高潮流白浆|