一種繼電保護自動測試系統中字符串比較的方法和系統的制作方法
【技術領域】
[0001]本發明涉及電力系統繼電保護自動測試領域,更具體地涉及一種繼電保護自動測試系統中字符串比較方法和系統。
【背景技術】
[0002]目前,各個繼電保護設備廠家生產的裝置設備數據模型與變電站整站SCD文件描述的設備數據模型之間存在一定差異,包括設備數據模型目錄結構、數據集以及單個數據的定義標準等。因此在繼電保護自動測試系統生成自動測試方案前,需針對裝置設備數據模型和變電站SCD文件之間進行匹配性測試。字符串比較算法可以找出兩個字符串之間所有相同部分以及不同部分,在進行匹配性測試時,利用該算法的比較結果提取關鍵字,再根據關鍵字技術提高匹配度;設備數據模型測試程序界面顯示測試結果,包括裝置設備數據模型與SCD文件兩者的所有數據,字符串比較算法可將匹配成功的數據之間相同部分和不同部分用不同顏色的字體顯示,使界面顯示更直觀。
[0003]傳統的比較字符串的算法是判斷兩個字符串是否相同或一個字符串中是否包含另一個字符串,并且當字符串中同時存在英文字符和漢字時,不能做出正確比較,這樣的算法不能直接應用在繼電保護自動測試系統中。在進行繼電保護自動測試時,對裝置設備數據模型的測試要求找出兩個字符串中所有相同部分和不同部分,解決此問題時,傳統字符串比較算法正確率較低,尤其在兩個字符串相同字符塊較多時存在明顯的局限性。
【發明內容】
[0004]為了解決現有字符串比較算法的上述缺點而提出本發明。本發明提供了一種繼電保護自動測試系統中字符串比較的方法和系統,用于比較裝置設備數據模型與變電站整站SCD文件兩者對應數據之間的不同之處。
[0005]—方面,本發明提出了一種繼電保護自動測試系統中字符串的比較方法,其特征在于包括:
[0006]步驟一:比較兩個字符串長度,長的設為主串,短的設為子串;
[0007]步驟二:在子串中取副子串,其中初始副子串為子串本身;
[0008]步驟三:判斷副子串長度是否22;
[0009]步驟四:當確定副子串長度22時,判斷在主串里面是否能查找到副子串;
[0010]步驟五:當確定在主串里面能找到副子串時,將主串和子串中副子串部分設為兩個字符串相同部分;
[0011]步驟六:更新在主串中查找副子串的頭位置;
[0012]步驟七:判斷是否繼續查找;
[0013]步驟八:更新副子串,重復步驟二?步驟八,直到滿足結束查找條件。
[0014]另一方面,本發明提出了一種繼電保護自動測試系統中字符串比較的系統,包括:
[0015]初始化模塊,用于比較兩個字符串長度,長的設為主串,短的設為子串,以及在子串中取副子串,其中初始副子串為子串本身;
[0016]副子串長度判斷模塊,用于判斷副子串長度是否22;
[0017]查找判斷模塊,用于在副子串長度判斷模塊確定副子串長度22時,判斷在主串里面是否能查找到副子串;
[0018]相同字符串設置模塊,用于在查找判斷模塊確定在主串里面能找到副子串時,將主串和子串中副子串部分設為兩個字符串相同部分;
[0019]主串中的查找頭位置更新模塊,用于更新在主串中查找副子串的頭位置;
[0020]繼續查找判斷模塊,用于判斷是否繼續查找;以及
[0021]副子串更新模塊,用于在查找判斷模塊確定在主串中未找到副子串和在遍歷全部副子串判斷I吳塊中確定未遍歷完副子串時,更新副子串。
[0022]與現有技術相比,本發明的有益效果包括:
[0023]本發明提供的一種繼電保護自動測試系統中字符串比較的方法和系統,比較兩個字符串長度,長的設為主串,短的設為子串;在子串中取副子串(初始副子串為子串本身);判斷副子串長度是否小于2;當確定副子串長度不小于2時,判斷在主串里面是否能查找到副子串;當確定在主串里面能找到副子串時,將主串和子串中副子串部分設為兩個字符串相同部分;更新在主串中查找副子串的頭位置;判斷是否遍歷完全部副子串;以及更新副子串。在繼電保護自動測試系統中,需對裝置設備數據模型與變電站SCD文件相匹配,使用本發明的字符串比較方法和系統可以比較出兩者數據之間的異同,為提取關鍵字以及根據關鍵字技術進行匹配奠定了基礎,減少人工匹配與比較的工作量,可以提高匹配度。
【附圖說明】
[0024]圖1是根據本發明的一個實施例的繼電保護自動測試系統中字符串比較的方法的流程圖;
[0025]圖2是根據本發明的一個實施例的繼電保護自動測試系統中字符串比較的系統框圖。
【具體實施方式】
[0026]提供參考附圖的下面描述以幫助全面理解本發明的示范性實施例。其包括各種細節以助于理解,而應當將它們認為僅僅是示范性的。因此,本領域普通技術人員應當認識至IJ,可以對這里描述的實施例做出各種改變和修改,而不會背離本發明的范圍和精神。同樣,為了清楚和簡明,省略了對公知功能和結構的描述。
[0027]下面結合附圖,對本發明的一個實施例的繼電保護自動測試系統中字符串的比較方法和系統的【具體實施方式】進行詳細地說明。
[0028]本發明的一個實施例的繼電保護自動測試系統中字符串比較的方法的流程圖如圖1所示,具體的流程包括以下步驟:
[0029]S101、比較兩個字符串長度,長的設為主串,短的設為子串;
[0030]S102、在子串中取副子串(初始副子串為子串本身);
[0031]S103、判斷副子串長度是否2 2;若是,執行步驟5104;若否,執行步驟5107;
[0032]S104、當確定副子串長度2 2時,判斷在主串里面是否能查找到副子串;若是,執行步驟S105 ;若否,執行步驟S108 ;
[0033]S105、當確定在主串里面能找到副子串時,將主串和子串中副子串部分設為兩個字符串相同部分;
[0034]S106、更新在主串中查找副子串的頭位置;
[0035]S107、判斷是否繼續查找;若是,執行步驟S108;若否,結束查找;
[0036]S108、更新副子串,重復步驟二?步驟八,直到結束查找。
[0037]下面對上述各步驟的具體實現方式進行詳細的說明。
[0038]上述步驟S102中在子串中取副子串,具體地可以使用MFC類庫CString類里Mid成員函數從子串中取副子串StrTemp I:
[0039]StrTempl = SubString->Mid( i , j)
[0040]其中,SubString表示指向子串的指針;SubString->Mid(i,j)表示取子串中從索引為i(第一個字符索引為i = 0,后面的依次類推)的字符開始長度為j的字符串。進一步地,上述步驟S102中初始副子串為子串本身表示初始i = 0,j = SubArry。其中i表示副子串取子串中的字符串第一個字符索引(子串第一個字符索引為i = 0,后面的依次類推表示該字符串長度;SubArry表不子串長度。
[0041]上述步驟S104中判斷在主串里面是否能找到副子串包括:
[0042]使用MFC類庫CString類里find成員函數在主串中找副子串:
[0043]SourceBegin = Source->F ind(StrTempl,Findnext)
[0044]其中,SourceBegin表示在主串中找到副子串時的頭位置,并且如果沒找到則為-1 ; Source表示指向主串的指針;Source->Find(StrTempI ,Findnext)表示在主串中從索引為Findnext (第一個字符索弓I為Findnext = O,后面的依次類推)的字符開始找StrTemp I。
[0045]當返回SourceBegin值為-1時,確定沒有在主串中找到副子串;以及
[0046]當返回SourceBegin值不為-1時,確定在主串中找到副子串。
[0047]上述步驟S106中,其中通過以下來更新在主串中查找副子串的頭位置:用Findnext表示更新后的頭位置,貝Ij
[0048]F indnext = SourceBegin+j
[0049]其中,SourceBeg