EPLAN作為ECAD領域里的“閬苑仙葩”(注:出自于《紅樓夢》的經典詞曲《枉凝眉》,指仙界的花草),支持正則表達式不足為奇。不過大多數情況下,客戶都用不到它,所以多數人并不知悉它的存在,這么多年來,筆者也就用過不到20回,屬于壓箱底落灰的狀態。
昨天有個客戶問了一個問題:在結構標識總覽報表中,想要有一列用于顯示結構標識符的前綴(也就是前綴和標識符拆分為兩列顯示),參考下方的“前序符號”列和“代號”列。EPLAN的可選屬性雖然多,但找不到所需要的屬性。客戶為此感到困擾。

單身美女常說“這么多男生,沒有一個是我愛的”,此時的客戶心里說“這么多屬性,沒有一個是我要的”。

找不到想要的屬性該怎么辦呢?昌暉儀表給想了兩個辦法:簡單的辦法、高效的辦法。簡單的意思是動腦少一些;高效的意思是動手少一些。按照《高效能人士的七個習慣》中的觀點,“個人永遠有選擇的自由”、“個人應為自己的選擇負責(不怨天不尤人)”。因此,哪種方法適合你,取決于你自己的選擇。
方法一:使用一個新的屬性
既然找不到現成的可用屬性,那我就使用一個另外的屬性,比如Structure Description 2<1007>(結構描述2),將其插入到報表表格中。
通過主菜單“項目數據→結構標識符管理”,打開對話框。點擊鼠標右鍵,如標記① ;選擇“配置顯示”,如標記② ,將屬性Structure Description 2<1007>(結構描述2)添加到對話框中。
對于高層代號,這一列的值應該填寫等號(=);對于位置代號,這一列的值應該填寫(+);對于文檔類型,這一列應該填寫(&)……填寫完成后,更新報表,想要的結果就出來了。

這種方法非常簡單,但是有個缺點。比如從別的項目復制了圖紙過來,或手工新增了新的結構標識符,要始終記得修改這里的Structure Description 2<1007>(結構描述2),否則報表會有些地方是空缺的。
方法二:使用正則表達式
正則表達式的思路比較簡單,找到一個屬性,比如Structure identifier <20000> / Complete structure identifier with preceding sign <1003>(結構標識符/帶前綴的完整結構標識符),把不需要的部分去除,只保留前綴即可。

打開表格,插入占位符文本,彈出對話框中選擇① 格式屬性/計算屬性,然后選擇所需要的屬性③ Structure identifier <20000> / Complete structure identifier with preceding sign <1003>(結構標識符/帶前綴的完整結構標識符),別忘記激活④ 替代文本,我使用的是“表格10”。

在項目屬性中,找到“塊屬性:替代文本[10]”,把值○│??_??@+=&#+$;│ 粘貼進去,更新報表即可得到想要的結果。

相較于編程語言或增強文本編輯器,EPLAN的正則表達式有點半吊子。那么多好的正則引擎,偏偏它使用了一個很不咋地的ECMAScript。這個引擎支持的語法太少了,不夠強大。比如環視(LookAround)是很重要的語法,但EPLAN只支持肯定前視(Positive Lookahead)和否點前視(Negative Lookahead),不支持回顧。
本來按筆者最初想法,可以使用肯定回顧(Positive Lookback)語法(?<=[+=&#]).+$輕松解決,但是不成功,確認半天是語法不支持。這個語法的意思是把[+=&#]后面的內容去掉。最后不得不使用了一個排除表達式[^+=&#]+$,這個表達式有缺陷,如果遇到+A1+LOC1這種多層結構時會有問題,需要重新設計語法,好在這個客戶暫時沒有多層結構。
期望EPLAN增強正則表達式功能,十年來筆者一直不曾放棄,它可以使得EPLAN更靈活和強大。成功,源自于不放棄!