魏霞,鄭勝,秦雄杰
基于FORTRAN的項目在系統(tǒng)平臺移植時的數(shù)據(jù)挖掘
魏霞,鄭勝,秦雄杰
針對核仿真系統(tǒng)在不同系統(tǒng)平臺(由Windows到Linux)轉(zhuǎn)換中異構(gòu)數(shù)據(jù)格式的不同,從大量多特征源文件中挖掘所需數(shù)據(jù),并轉(zhuǎn)換存儲到需求格式文件中的通用方法。主要采用AWK腳本實現(xiàn)對所需數(shù)據(jù)提取、格式轉(zhuǎn)換、原文件注釋等功能的通用性方法。利用此方法,對DCS核仿真嚴(yán)重事故模擬機(jī)等多個基于FORTRAN語言的系統(tǒng),在平臺移植時起到了可靠、高效的通用性。
AWK;FORTRAN;多特征;數(shù)據(jù)挖掘;通用方法
資源的缺乏提醒了各國重視核電的發(fā)展,現(xiàn)在社會是高效競爭的社會,各國核電裝機(jī)容量的多少,很大程度上反映了各國經(jīng)濟(jì)、工業(yè)和科技的綜合實力和水平。三哩島核事故、切爾諾貝利核事故、福島核事故等事件標(biāo)示了核仿真嚴(yán)重事故模擬機(jī)研發(fā)的重要性,為了在更穩(wěn)的系統(tǒng)平臺(Linux)中運行,在此將基于FORTRAN語言的核仿真嚴(yán)重事故模擬機(jī)系統(tǒng)從Windows系統(tǒng)平臺移植到Linux系統(tǒng)平臺。在系統(tǒng)移植過程中最首要、最重要的就是對所需的原數(shù)據(jù)的挖掘,它影響著下面一步步工作的進(jìn)度。
同時在平臺移植時,異構(gòu)數(shù)據(jù)高效挖掘及轉(zhuǎn)換也正是當(dāng)今眾多方面學(xué)者研究的熱點。其中國外從應(yīng)用方面(政府管理、商業(yè)經(jīng)營、金融、社保、醫(yī)學(xué)、天文等)研究,并且大量的數(shù)據(jù)挖掘工具和軟件也已經(jīng)出現(xiàn),有基于統(tǒng)計分析的軟件,如:SAS、SPSS等;有應(yīng)用于新技術(shù)如模糊邏輯、人工神經(jīng)網(wǎng)絡(luò)、決策樹理論的工具,如:CBR Express、Esteen、Neural network Browser等軟件。國內(nèi)對數(shù)據(jù)挖掘的研究稍晚,1993年國家自然科學(xué)基金首次開始支持對該領(lǐng)域的研究項目,一般集中于學(xué)習(xí)算法的研究、數(shù)據(jù)挖掘的實際應(yīng)用以及有關(guān)數(shù)據(jù)挖掘理論方面的研究。但這些軟件與研究并不是包羅萬象地應(yīng)用于任何數(shù)據(jù)挖掘技術(shù)的軟件,而是有所側(cè)重[1]。
而本方法則轉(zhuǎn)換思路,不從應(yīng)用領(lǐng)域,而從系統(tǒng)所基于的語言的角度,利用發(fā)現(xiàn)特征、聚類、分類的方式,同時與新平臺數(shù)據(jù)倉庫結(jié)合。研發(fā)出了一個利用AWK腳本,針對大量多特征的 FORTRAN語言的系統(tǒng)平臺移植時的數(shù)據(jù)挖掘的簡單的、可靠的、通用的方法。利用本文提出的方法,對 DCS核仿真嚴(yán)重事故模擬機(jī)等多個應(yīng)用領(lǐng)域的基于FORTRAN語言的系統(tǒng)在平臺移植時起到了可靠、高效的通用性。
1.1AWK
和java、c++、c#等高級語言相比,AWK是化難為易的一種簡單且優(yōu)良的工具,它具有編程語言及數(shù)據(jù)操作腳本具備的一個完整的語言所應(yīng)具有的幾乎所有精美特性。它可以通過簡短的程序讀取輸入文件、為數(shù)據(jù)排序、處理數(shù)據(jù)、對輸入執(zhí)行計算以及生成報表等,高效的為數(shù)據(jù)庫做好準(zhǔn)備。同時,AWK還具備有些高級語言而沒有的正則表達(dá)式功能,正則表達(dá)式并非一門專用語言,但它可以讓用戶通過使用一系列普通字符和特殊字符,構(gòu)建能明確描述文本字符串的匹配模式。除了簡單描述這些模式之外,正則表達(dá)式解釋引擎還可用于遍歷匹配,以智能、高效的方式查找、轉(zhuǎn)換所需文本格式[2]。本方法中則充分利用了其重要價值。
1.2實驗思路及具體操作
1.2.1實驗思路及步驟
原仿真系統(tǒng)是基于FORTRAN語言,在SimBase[3]仿真支撐軟件系統(tǒng)下運行于Windows平臺的模塊化系統(tǒng)。原系統(tǒng)數(shù)據(jù)均是分散于各模塊中下屬子文件中,在新的平臺(Linux)下要想使原系統(tǒng)達(dá)到同樣效果,首先要明確在Linux平臺中SimBase仿真支撐軟件系統(tǒng)下對FORTRAN所需數(shù)據(jù)及格式的需求:新平臺下要求將所需數(shù)據(jù)(即全局變量,局部變量不變)按照統(tǒng)一格式放到統(tǒng)一數(shù)據(jù)庫文件中,運行系統(tǒng)時再統(tǒng)一分塊加載。其統(tǒng)一數(shù)據(jù)庫所需全局變量數(shù)據(jù)格式如下:
.desc <輸入簡短的對加入變量的描述,最多不超過5行,同時不允許直接回車,至少要輸入一個空格符再回車>
.unit <輸入變量的單位,如:pw>
.sys <輸入此變量所屬的用戶系統(tǒng)>
.type <輸入此變量的類型,如:整數(shù)—“I,4”,邏輯變量—“L,1”,實數(shù)—“R,4”>
.form <輸入變量的形式,例如:整數(shù)—“i19”,實數(shù)—“e16.8”,邏輯變量—“l(fā)19”>
.valu <值>,<類型:v-變量;c-常量;p-參數(shù)>
.dim <輸入此變量的維數(shù)>
.pred <輸入所屬的 global(變量的分類區(qū))>,
基于上述要求,實驗的主要處理流程圖如圖1所示:
圖1 主要處理流程圖
依上圖思路,實驗在滿足所需數(shù)據(jù)、格式且在靈活可變的自規(guī)定的前提下分為以下3個步驟:
提取全局變量:一個全局變量的微小改變會影響到整個項目的運行,因此選擇在整個項目開展之前,將待處理代碼中所有全局變量、所屬結(jié)構(gòu)體及數(shù)據(jù)類型做整體提取工作,并根據(jù)是否核實所占空間,將全局變量(包括所屬結(jié)構(gòu)體)分別存于不同文件中;
注釋全局變量聲明語句:依據(jù)上述情況可知,在平臺中變量主要由DBM統(tǒng)一管理。因此在移植過程中,同時需要將程序中相關(guān)變量聲明語句注釋,以不影響新平臺運行調(diào)試需求。此方法中采用了將定義全局變量語句和類型說明語句前加上字符“c”,使其所在語句成為注釋說明語句;
轉(zhuǎn)換調(diào)用語句中全局變量格式:為了記載在原數(shù)據(jù)所屬Fortran文件中顯示的變量所屬結(jié)構(gòu)體,以滿足新平臺中數(shù)據(jù)庫文件對結(jié)構(gòu)體的需求,此方法中采用了將調(diào)用語句中的所有屬于全局的變量前加上變量所屬的結(jié)構(gòu)名和下劃線“_”。
1.2.2實驗具體操作方法及結(jié)果
(1)全局變量的提取
提取全局變量時利用AWK的特長:選取不同的字段分隔符、充分利用正則表達(dá)式、內(nèi)置函數(shù)(substr()、match())等。如圖2所示:
圖2 原文件全局變量
從圖2中會發(fā)現(xiàn):全局變量有普通變量(如abuf)、一維變量(如 wspf(20)、naver(mxavrg))、二維變量(如ndt(6,2))及多維變量(如pr(20,10,2)、matbuf(5,mxavrg,10))等。這就要求此提取方法要有靈活的通用性,觀察全局變量結(jié)束標(biāo)示,用正則表達(dá)式查詢結(jié)束標(biāo)示,同時注意是否與先前所選擇的字段分隔符是否相同,如果先前選擇的字段分隔符中包括有逗號,那么逗號就將比如ndt(6,2)、matbuf(5,mxavrg,10)等格式的變量不能按需求提取,那么下步計算變量所占用內(nèi)存時就不能實現(xiàn),如果只采用其它字符而不使用逗號為字段分隔符,則逗號將被歸屬于其中變量(由圖2可看出),因此,逗號也被選擇為字段分隔符。此時再利用內(nèi)置函數(shù) match()配合查找需求的變量,用正則表達(dá)式查找變量是否結(jié)束,其中以易于被忽視的下標(biāo)括號為重要標(biāo)示。鑒于此思想,所得結(jié)果如圖3所示:
圖3 不同需求提取結(jié)果
當(dāng)考慮到文件數(shù)量的時候,就要再加上批處理的功能。只需在上述代碼中加入一個簡短循環(huán)即可實現(xiàn)。首先可以將所有要處理的文件名放入同一個文件中,然后利用FORTRAN文件擴(kuò)展名的共性(*.h、*.for)及AWK具有的特色數(shù)據(jù)結(jié)構(gòu)——哈希數(shù)組的特點,將數(shù)以萬計的文件一次處理完畢,以達(dá)到高效的批處理方式[4]。
上述提取的全局變量是可以統(tǒng)計內(nèi)存空間的變量,而當(dāng)在新系統(tǒng)平臺中不需要統(tǒng)計變量所占空間,只要單純的全局變量名時,此方法中則舍掉采用的通俗方式:在上述得到的變量文件中去掉內(nèi)存說明(即下標(biāo))。因為如果在第一步中有錯,則會影響此步結(jié)果。在此則用潛在的性能提升的方式:短路方式(仍然從原文件中直接提?。^(qū)別與上面的重要之處是:首先判斷此變量是否屬于普通變量,如果屬于普通變量則直接提取,如果屬于數(shù)組變量,則要以左括號為標(biāo)示,利用正則表達(dá)式截取出所需變量名,同時以右括號為標(biāo)示以判斷此變量的結(jié)束,以防如matbuf(5,mxavrg,10)類似的變量,而將“mxavrg”誤認(rèn)為是全局變量。所得結(jié)果如圖3中右半部分所示。
(2)注釋全局變量定義和類型聲明語句
通過上述的方法,兩種全局變量順利提取后,原文件中全局變量定義語句已在新系統(tǒng)平臺中失效,其中為了提高效率,則仍然用短路方式直接查看原文件中哪行包含“common”,再選用(1)中類似的標(biāo)示(flag、fflag)配合檢查語句的結(jié)束,可快速將全局變量定義語句注釋,如圖4所示:
圖 4 注釋全局變量定義說明語句
觀察圖5上圖可以發(fā)現(xiàn)變量類型聲明語句的多樣性,而為了達(dá)到注釋全局變量類型說明語句的通用性,則需用AWK靈活處理文本的優(yōu)勢,配合圖3右部分提取出的全局變量,與原文件類型說明語句中包含的變量完全匹配,且結(jié)合上面提取變量時用到的重要標(biāo)示(括號)及短路方式,辨別出是否是全局變量類型說明語句,將其轉(zhuǎn)換成注釋語句,以消除原全局變量類型聲明語句障礙。結(jié)果如圖5下圖。其中圖5中25行—30行沒有改變成注釋語句,原因是其中的變量是局部變量,并沒有要求其改變成注釋語句。
(3)轉(zhuǎn)換call語句(調(diào)用語句)中全局變量格式
圖5 變量類型聲明語句前(上部)后(下部)
如圖6所示:
圖6 加結(jié)構(gòu)體前(上部)后(下部)
從圖6中會發(fā)現(xiàn)同一個call語句可以同時調(diào)用全局變量和局部變量,而需求是將屬于全局的變量名前加上變量所屬的結(jié)構(gòu)名和下劃線“_”,局部變量仍沒有被要求其格式轉(zhuǎn)換。此時要配合步驟(1)中提取的全局變量和其所屬結(jié)構(gòu)體,以及再次利用語句結(jié)束標(biāo)示,即call語句中的括號,且結(jié)合AWK的特色數(shù)據(jù)結(jié)構(gòu)——哈希數(shù)組,先將變量及所屬結(jié)構(gòu)體依據(jù)哈希數(shù)組建立關(guān)系,為下一步為變量加載結(jié)構(gòu)體名做準(zhǔn)備,同時判斷是否輸入哈希數(shù)組中的全局變量。即可順利完成步驟(3),結(jié)果如圖6下部。
Fortran不只在目前的熱門行業(yè)——核電行業(yè)中占優(yōu)勢地位,在工程計算中的應(yīng)用、在結(jié)構(gòu)動力分析中的應(yīng)用、在大地電磁測探中得到應(yīng)用、在計算程序圖形界面中等大數(shù)量項目中獨自或結(jié)合其它軟件至今仍得到廣泛的應(yīng)用。在DCS核電仿真嚴(yán)重事故模擬機(jī)系統(tǒng)平臺移植及其它幾個大型模塊化項目在挖掘所需數(shù)據(jù)的實驗中,均證實了此方法的簡單有效性。大量的數(shù)據(jù)表明:此方法在基于FORTRAN語言被應(yīng)用的各領(lǐng)域移植中均可使用。
在使用AWK時要注意不可忽視的小知識點,比如:所提取的對象所在行的特性、循環(huán)語句while和for的不同效果、分隔符(空格與“ ”、“,”)的不同使用環(huán)境、哈希數(shù)組中下標(biāo)類型超出了一般語言的限制等,在此方法中有重要的影響。那么,在此方法完備的基礎(chǔ)上,再結(jié)合跨平臺Qt,將其整合成可視化的易于操作的小工具,則是下一步研究的具體工作,達(dá)到即使對FORTRAN文件和AWK操作不熟悉,也可以利用此工具輕松挖掘數(shù)據(jù)的目的。
[1] 陳卓民.數(shù)據(jù)挖掘技術(shù)在國內(nèi)外的研究和發(fā)展現(xiàn)狀[J].青年文學(xué)家.2009,(16):122-123.
[2] [2] Jeffrey E.F.Friedl編著.精通正則表達(dá)式[M].電子工業(yè)出版社.2009.07
[3] ] 仿真支撐軟件 SimBase使用手冊[M].中核武漢核電運行技術(shù)股份有限公司.
[4] 江松波,倪子偉.淺談自底向上的Shell腳本編程及效率優(yōu)化[J].計算機(jī)與現(xiàn)代化.2011,(2):73-76,80.
[5] 尚力,陳根土.Unix/Linux環(huán)境下實用程序awk的簡要分析及應(yīng)用[J].金融科技時代,2013,(10):56-57.
Data Mining of Project Based on FORTRAN in the Porting of System Platform
Wei Xia1,2,Zheng Sheng1,Qin Xiongjie3
(1.Science College,China Three Gorges University,Hubei 443002,China; 2.Zhoukou Vocational and Technical College,Henan 466000,China; 3.China Nuclear Power Operation Technology Corporation,LTD,Wuhan 430223,China)
In this paper the nuclear simulation system in different system platforms (from windows to Linux) conversion has different heterogeneous data formats,so it researches the common method how to mine the needed data from a large number of multi features source files and save them in the needed formats after conversion. The general method of data extraction,format conversion,and annotation of the original file function is implemented by AWK script. Using the method proposed in this paper,the DCS nuclear simulation system and other several FORTRAN-based systems are reliable and efficient for the platform transplantation.
AWK;FORTRAN; Multi Feature;Bracket Marking; Short Circuit Method; Data Mining
TP311.1
A
1007-757X(2016)03-0070-03
魏 霞(1978-),女,三峽大學(xué)、周口職業(yè)技術(shù)學(xué)院,講師,碩士研究生,研究方向:數(shù)字圖像處理,周口,466000;
鄭 勝(1965-),男,三峽大學(xué),教授,博士,研究方向:圖像處理、目標(biāo)識別、神經(jīng)網(wǎng)絡(luò)與智能控制,宜昌,443002;
秦雄杰(1989-),男,中核武漢核電運行技術(shù)股份有限公司,助理工程師,碩士,研究方向:核電仿真,湖北,430223
(2015.09.14)