国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

鐵路工程設(shè)計結(jié)構(gòu)化數(shù)據(jù)交換格式研究

2022-05-21 08:15馮亦博馬騰
鐵路技術(shù)創(chuàng)新 2022年1期
關(guān)鍵詞:數(shù)據(jù)表單元格工程設(shè)計

馮亦博,馬騰

(中鐵第一勘察設(shè)計院集團有限公司中國鐵建BIM工程實驗室,陜西 西安 710000)

1 概述

鐵路工程設(shè)計是一項龐大復(fù)雜的系統(tǒng)性工程,其項目類型多、涉及專業(yè)多、參與人員多[1],需要設(shè)計單位內(nèi)部及外部團隊之間密切協(xié)同,協(xié)同工作難度大。另外,為了充分發(fā)揮設(shè)計成果的數(shù)據(jù)價值,鐵路工程設(shè)計數(shù)據(jù)需要在項目各參與方以及項目各階段之間準(zhǔn)確、高效、無損傳遞,這對鐵路工程設(shè)計信息化水平提出了更高要求。目前,在鐵路各專業(yè)設(shè)計過程及最終設(shè)計成果中,數(shù)據(jù)內(nèi)容傳遞多采用Excel表格來完成,但Excel數(shù)據(jù)缺乏統(tǒng)一、固定的模式,不能進(jìn)行分類描述處理[2],本身不屬于結(jié)構(gòu)化數(shù)據(jù),不是數(shù)據(jù)存儲的理想格式;面對龐大復(fù)雜的鐵路系統(tǒng)工程,若利用Excel數(shù)據(jù)進(jìn)行數(shù)據(jù)交換,容易出現(xiàn)設(shè)計意圖表達(dá)與理解不明確、數(shù)據(jù)傳遞不順暢等問題,影響鐵路工程項目的順利推進(jìn)。

目前,常用的數(shù)據(jù)交換格式主要包括XML、JSON(JavaScript Object Notation)、YAML等[3],其中JSON是一種輕量級的數(shù)據(jù)交換格式[4],基于純文本,數(shù)據(jù)格式非常簡單,層次清晰,易于閱讀和編寫,同時也易于機器解析和生成,具備良好的靈活性[5]。如果將鐵路工程設(shè)計數(shù)據(jù)存儲為JSON格式結(jié)構(gòu)化數(shù)據(jù),利用JSON解析器可以將繁雜的數(shù)據(jù)表現(xiàn)為結(jié)構(gòu)明晰的樹狀結(jié)構(gòu),能夠讓使用者更加快速獲取所需的信息,數(shù)據(jù)的傳遞也會變得更加準(zhǔn)確而高效。JSON格式文件樹狀結(jié)構(gòu)見圖1。

圖1 JSON格式文件樹狀結(jié)構(gòu)

國際字典框架(International Framework for Dictionaries,IFD)是目前工程行業(yè)常用的一種標(biāo)準(zhǔn),其目的是保證所交換的數(shù)據(jù)信息與用戶需要的數(shù)據(jù)信息完全一致。IFD標(biāo)準(zhǔn)為每條數(shù)據(jù)賦予唯一標(biāo)識碼GUID,使得無論在哪種環(huán)境下,只要數(shù)據(jù)的IFD編碼一致,就可以保證其代表的信息是一致的[6]。2014年12月,鐵路BIM聯(lián)盟發(fā)布了《鐵路工程信息模型分類和編碼標(biāo)準(zhǔn)(1.0版)》(簡稱鐵路IFD標(biāo)準(zhǔn)),是為規(guī)范鐵路工程信息的分類、編碼與組織,實現(xiàn)鐵路工程全生命周期信息的交換、共享,推動鐵路工程信息模型的應(yīng)用發(fā)展而制定的標(biāo)準(zhǔn)。鐵路IFD標(biāo)準(zhǔn)分類表可分為3類:一類是引用國家標(biāo)準(zhǔn);一類是在國家標(biāo)準(zhǔn)基礎(chǔ)上擴充鐵路工程內(nèi)容;最后一類是鐵路工程獨立編制的分類表[7]。部分鐵路IFD標(biāo)準(zhǔn)編碼見圖2。

圖2 部分鐵路工程IFD標(biāo)準(zhǔn)編碼

目前,鐵路IFD標(biāo)準(zhǔn)主要應(yīng)用于鐵路BIM模型的屬性擴展,為BIM模型在工程項目管理平臺內(nèi)層級結(jié)構(gòu)的建立與管理提供便利[8]。由于鐵路工程設(shè)計數(shù)據(jù)需要在項目各參與方以及項目各階段之間傳遞,若將IFD標(biāo)準(zhǔn)編碼引入鐵路工程設(shè)計數(shù)據(jù)表,對數(shù)據(jù)表所包含的條目進(jìn)行一一對應(yīng)的IFD編碼,數(shù)據(jù)表內(nèi)容將會得到更精確的描述,數(shù)據(jù)流轉(zhuǎn)的準(zhǔn)確性也會得到保障。根據(jù)以“歐賽(OpenDesign)”數(shù)據(jù)管理軟件為代表的鐵路行業(yè)施工圖電子交付工具對鐵路工程設(shè)計數(shù)據(jù)表的要求,為精確識別設(shè)計數(shù)據(jù)表格內(nèi)容,需要提供能夠反映設(shè)計數(shù)據(jù)條目層級關(guān)系的IFD編碼,以便對設(shè)計數(shù)據(jù)表進(jìn)行導(dǎo)入操作,所以將鐵路IFD標(biāo)準(zhǔn)編碼引入鐵路工程設(shè)計數(shù)據(jù)表勢在必行。

2 鐵路工程設(shè)計結(jié)構(gòu)化數(shù)據(jù)要求

根據(jù)中國國家鐵路集團有限公司發(fā)布的《鐵路建設(shè)項目施工圖電子文件交付管理辦法》(鐵建設(shè)〔2020〕123號)文件要求,施工圖相關(guān)附表電子文件須通過基于文本的結(jié)構(gòu)化數(shù)據(jù)交換格式提供。對于設(shè)計人員,由于工作習(xí)慣及代碼編寫水平的限制,無法直接將設(shè)計成果相關(guān)數(shù)據(jù)以純文本代碼形式編寫為結(jié)構(gòu)化數(shù)據(jù)交換格式。考慮到Microsoft Office系列辦公軟件在廣大設(shè)計人員中的使用普遍性和便利性,只有將設(shè)計成果數(shù)據(jù)先錄入Excel表格,再通過工具將Excel表格轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù)交換格式,才是現(xiàn)階段相關(guān)附表電子文件以結(jié)構(gòu)化格式交付的可行途徑。

目前,已有很多第三方工具可以實現(xiàn)Excel表格數(shù)據(jù)向JSON結(jié)構(gòu)化數(shù)據(jù)的轉(zhuǎn)換,例如Microsoft Excel程序內(nèi)的轉(zhuǎn)換插件以及部分在線轉(zhuǎn)換工具,但這些轉(zhuǎn)換工具僅可對數(shù)據(jù)與表頭內(nèi)容一一對應(yīng)且無合并單元格的簡單Excel表格進(jìn)行轉(zhuǎn)換,不能對表頭存在合并單元格的多層復(fù)雜Excel表格進(jìn)行轉(zhuǎn)換。鐵路工程各專業(yè)設(shè)計數(shù)據(jù)復(fù)雜、種類繁多,為了保證設(shè)計數(shù)據(jù)的完備性及準(zhǔn)確性,有時對于同一個表頭元素需要定義若干個屬性描述類目,所以大部分鐵路工程設(shè)計數(shù)據(jù)Excel表格將以合并單元格的復(fù)雜表頭形式呈現(xiàn)。通過對存在合并單元格表頭的設(shè)計數(shù)據(jù)Excel表格進(jìn)行研究,提出一種基于VBA的鐵路工程設(shè)計結(jié)構(gòu)化數(shù)據(jù)交換格式轉(zhuǎn)換方法。帶有合并單元格表頭的鐵路工程設(shè)計數(shù)據(jù)表示例見圖3。

圖3 帶有合并單元格表頭的鐵路工程設(shè)計數(shù)據(jù)表示例

3 鐵路工程設(shè)計數(shù)據(jù)表表頭處理

VBA是Visual Basic的一種宏語言,是在桌面應(yīng)用程序中執(zhí)行通用自動化任務(wù)的編程語言,主要能用來擴展Windows應(yīng)用程序功能,特別是Microsoft Office軟件[9]。在鐵路工程設(shè)計數(shù)據(jù)已經(jīng)采用Excel表格形式進(jìn)行存儲的基礎(chǔ)上,直接利用VBA實現(xiàn)結(jié)構(gòu)化數(shù)據(jù)格式轉(zhuǎn)換將更加便捷和直觀。

JSON格式數(shù)據(jù)文件以純文本形式進(jìn)行存儲,因此可利用VBA的Adodb.Stream組件UTF-8文本流實現(xiàn)JSON格式數(shù)據(jù)文件的編寫。JSON的語法也較為簡單,數(shù)據(jù)以名稱/值對體現(xiàn),值可以是字符串、數(shù)字、對象、數(shù)組、邏輯值、null中的一種[10]。以大括號“{}”代表對象,中括號“[]”代表數(shù)組;對象可以包含多個名稱/值對,數(shù)組可以包含多個對象;對象中的同級值對或數(shù)組中的同級對象之間用逗號“,”隔開,最后一個值對或?qū)ο笾蟛辉俪霈F(xiàn)逗號[11]。JSON文件的編寫只有建立在上述語法基礎(chǔ)上才是正確可被解析的。

針對不同專業(yè)不同內(nèi)容的數(shù)據(jù)表格,表頭級數(shù)、合并形式也完全不同,為了將表頭內(nèi)容按層級分解為JSON對象,同時將基層表頭與相應(yīng)數(shù)據(jù)處理為JSON值對,首先需要將表頭區(qū)域與數(shù)據(jù)區(qū)域進(jìn)行分離。根據(jù)數(shù)據(jù)表格特點,與數(shù)據(jù)直接對應(yīng)的基層表頭單元格無論是否為合并單元格,其列數(shù)均為1,于是可以利用單元格列數(shù)語句MergeArea.Columns.Count,對數(shù)據(jù)表單元格按從左到右、從上到下順序逐一進(jìn)行判斷;若單元格列數(shù)非1則跳至下一行首端繼續(xù)進(jìn)行判斷,直到某行各單元格列數(shù)均為1時即可停止判斷,該行至表格首行即為表頭所在區(qū)域,其下一行至表格末行即為數(shù)據(jù)所在區(qū)域。表頭區(qū)域的分離流程見圖4。

圖4 表頭區(qū)域的分離流程

4 鐵路工程設(shè)計數(shù)據(jù)表內(nèi)容處理

表頭區(qū)域與數(shù)據(jù)區(qū)域分離后,即進(jìn)入數(shù)據(jù)處理、JSON文件編寫階段。根據(jù)JSON文件編寫特點,對于同一行數(shù)據(jù),Excel表頭單元格的處理順序只能是由左至右依次對每列表頭單元格由上至下進(jìn)行處理,橫向合并表頭單元格作為子對象名稱,基層表頭單元格與數(shù)據(jù)構(gòu)成值對;同時,多行數(shù)據(jù)子對象以數(shù)組形式進(jìn)行集合。因此,具有合并單元格表頭的Excel表格向JSON格式文件轉(zhuǎn)換的要點在于,如何準(zhǔn)確識別表頭子對象的起始、表頭子對象的結(jié)尾以及同級表頭子對象或值對之間的間隔,并分別進(jìn)行處理,才能滿足JSON格式文件語法要求。

4.1 表頭子對象起始識別

針對具有合并單元格的Excel表頭識別,提出一種遍歷Excel表格表頭區(qū)域,逐個對單元格進(jìn)行分析的方法。根據(jù)Excel表格特點,合并單元格只在合并范圍內(nèi)的左上角單元格存儲合并單元格的有效值,其余單元格均為空格。利用該特點可篩選出非空表頭單元格,同時利用MergeArea.Columns.Count語句判斷表頭單元格是否為單列。對于單列表頭,直接與相應(yīng)數(shù)據(jù)單元格合并組成值對;對于多列表頭,將其作為子對象進(jìn)行處理,并寫入符號“:{”作為子對象起始符。

4.2 表頭子對象結(jié)尾識別

當(dāng)遍歷至表頭區(qū)域末行的基層表頭單元格后,即可向上逐行對同列表頭單元格進(jìn)行分析,直到表頭區(qū)域首行為止,以準(zhǔn)確識別子對象的結(jié)尾。首先利用MergeArea.Row語句判斷上方單元格與上級表頭合并單元格的有效單元格是否位于同一行,再利用MergeArea.Column計算出上方單元格與有效單元格所在列號的差值,并與合并單元格列數(shù)MergeArea.Columns.Count進(jìn)行對比,若兩者相等即可認(rèn)定上方單元格已位于上級表頭合并單元格的末尾,寫入符號“}”作為該子對象的結(jié)尾符。

4.3 同級表頭子對象或值對間隔識別

對于數(shù)據(jù)區(qū)域同一行數(shù)據(jù)單元格,通過判斷,若未處于末列,值對之間以及同級子對象之間需寫入符號“,”進(jìn)行分隔;同時,對于數(shù)據(jù)區(qū)域各行,通過判斷,若未處于末行,各行子對象之間也需寫入符號“,”進(jìn)行分隔。

通過遍歷Excel表格單元格實現(xiàn)結(jié)構(gòu)化數(shù)據(jù)交換格式轉(zhuǎn)換的流程見圖5。

圖5 Excel表格向結(jié)構(gòu)化數(shù)據(jù)交換格式轉(zhuǎn)換流程

利用上述方法,將上文示例表格(見圖3)轉(zhuǎn)換為JSON格式文件的代碼見圖6。

圖6 示例表格轉(zhuǎn)換為JSON格式文件代碼

綜上,通過運用VBA工具,實現(xiàn)對鐵路工程設(shè)計數(shù)據(jù)Excel表格各單元格的遍歷,結(jié)合合并單元格的多種屬性進(jìn)行判別,將Excel表格的表頭及數(shù)據(jù)與JSON格式文件的子對象及值對一一對應(yīng),并根據(jù)JSON格式文件語法要求分別進(jìn)行處理,從而完成鐵路工程設(shè)計結(jié)構(gòu)化數(shù)據(jù)交換格式轉(zhuǎn)換。

5 鐵路工程設(shè)計數(shù)據(jù)表IFD標(biāo)準(zhǔn)編碼

以“歐賽(OpenDesign)”數(shù)據(jù)管理軟件為例,鐵路工程設(shè)計數(shù)據(jù)的錄入一般有2種途徑:一種是通過數(shù)據(jù)管理軟件的表格模板進(jìn)行手動輸入;另一種是通過附帶IFD標(biāo)準(zhǔn)編碼的設(shè)計數(shù)據(jù)Excel表格進(jìn)行導(dǎo)入。由于數(shù)據(jù)管理軟件運行環(huán)境目前僅限于Linux平臺,直接在數(shù)據(jù)管理軟件內(nèi)進(jìn)行手動輸入存在諸多不便。但如果在設(shè)計數(shù)據(jù)Excel表格內(nèi)手動添加反映層級關(guān)系的IFD標(biāo)準(zhǔn)編碼,也存在工作量大、查找困難、容易出錯等問題。

結(jié)合上文遍歷單元格的方法,鐵路工程設(shè)計數(shù)據(jù)表IFD標(biāo)準(zhǔn)編碼可采用對表頭區(qū)域進(jìn)行從上至下、從左至右逐格分析處理的自動化操作方法。一方面該方法可去除表頭單元格內(nèi)包含的計量單位標(biāo)注,另一方面可在鐵路IFD標(biāo)準(zhǔn)編碼庫內(nèi)查找表頭內(nèi)容,通過定位獲取對應(yīng)的IFD標(biāo)準(zhǔn)編碼,并寫入創(chuàng)建的IFD標(biāo)準(zhǔn)編碼一維數(shù)組中。為了在IFD標(biāo)準(zhǔn)編碼中體現(xiàn)表頭內(nèi)容的層級關(guān)系,若正在處理的表頭單元格被判斷為非基層表頭,則對相應(yīng)的IFD標(biāo)準(zhǔn)編碼另行添加后綴“_”;若正在處理的表頭單元格被判斷為基層表頭,則不添加后綴。最后利用join函數(shù)連接IFD標(biāo)準(zhǔn)編碼一維數(shù)組各元素,并將其作為文本寫入設(shè)計數(shù)據(jù)表新增首行對應(yīng)的單元格內(nèi),完成鐵路工程設(shè)計數(shù)據(jù)表IFD標(biāo)準(zhǔn)自動編碼,該成果為鐵路工程設(shè)計數(shù)據(jù)表導(dǎo)入“歐賽(OpenDesign)”數(shù)據(jù)管理軟件提供了可行途徑。實現(xiàn)鐵路工程設(shè)計數(shù)據(jù)表IFD標(biāo)準(zhǔn)自動編碼的流程見圖7。

圖7 鐵路工程設(shè)計數(shù)據(jù)表IFD標(biāo)準(zhǔn)自動編碼流程

利用上述方法,將上文示例表格(見圖3)進(jìn)行IFD標(biāo)準(zhǔn)編碼的結(jié)果見圖8。

圖8 引入IFD標(biāo)準(zhǔn)編碼的鐵路工程設(shè)計數(shù)據(jù)表示例

將附帶IFD標(biāo)準(zhǔn)編碼的鐵路工程設(shè)計數(shù)據(jù)表導(dǎo)入“歐賽(OpenDesign)”數(shù)據(jù)管理軟件的結(jié)果見圖9。

圖9 附帶IFD標(biāo)準(zhǔn)編碼的鐵路工程設(shè)計數(shù)據(jù)表導(dǎo)入結(jié)果

6 結(jié)束語

提出的鐵路工程設(shè)計結(jié)構(gòu)化數(shù)據(jù)交換格式轉(zhuǎn)換方法及鐵路IFD標(biāo)準(zhǔn)編碼方法,適用于多種形式的鐵路工程設(shè)計數(shù)據(jù)Excel表格,并具有結(jié)構(gòu)簡單、邏輯清晰、簡單實用等特點。同時,該方法可利用Visual Basic平臺進(jìn)行移植,并封裝成可獨立運行的轉(zhuǎn)換工具及編碼工具,能夠?qū)㈣F路工程設(shè)計數(shù)據(jù)Excel表格批量轉(zhuǎn)換為JSON格式文件及批量進(jìn)行IFD標(biāo)準(zhǔn)編碼,在符合廣大鐵路工程設(shè)計人員工作習(xí)慣的基礎(chǔ)上,可大幅減少待交付附表電子文件編制的工作量,提升設(shè)計人員工作效率,進(jìn)一步推進(jìn)鐵路工程建設(shè)電子化、信息化進(jìn)程。

猜你喜歡
數(shù)據(jù)表單元格工程設(shè)計
建筑設(shè)計中的人防工程設(shè)計
鄰近重要建構(gòu)筑物條件下的基坑工程設(shè)計
BIM在建筑給排水工程設(shè)計中的應(yīng)用
合并單元格 公式巧錄入
流水賬分類統(tǒng)計巧實現(xiàn)
中石化石油工程設(shè)計有限公司
玩轉(zhuǎn)方格
玩轉(zhuǎn)方格
湖北省新冠肺炎疫情數(shù)據(jù)表(2.26-3.25)
湖北省新冠肺炎疫情數(shù)據(jù)表