正則表達(dá)式(Regular Expression)描述了一種字符串匹配的模式(pattern),可以用來(lái)檢查一個(gè)串是否含有某種子串、將匹配的子串替換或者從某個(gè)串中取出符合某個(gè)條件的子串等。正則表達(dá)式在編程界、增強(qiáng)文本編輯器界家喻戶曉,人盡皆知;在辦公界、工程設(shè)計(jì)界則聞?wù)吡攘?。知者不惑,受益頗多;不知者無(wú)過(guò),沒(méi)啥損失。
EPLAN作為ECAD領(lǐng)域里的“閬苑仙葩”(注:出自于《紅樓夢(mèng)》的經(jīng)典詞曲《枉凝眉》,指仙界的花草),支持正則表達(dá)式不足為奇。不過(guò)大多數(shù)情況下,客戶都用不到它,所以多數(shù)人并不知悉它的存在,這么多年來(lái),筆者也就用過(guò)不到20回,屬于壓箱底落灰的狀態(tài)。
昨天有個(gè)客戶問(wèn)了一個(gè)問(wèn)題:在結(jié)構(gòu)標(biāo)識(shí)總覽報(bào)表中,想要有一列用于顯示結(jié)構(gòu)標(biāo)識(shí)符的前綴(也就是前綴和標(biāo)識(shí)符拆分為兩列顯示),參考下方的“前序符號(hào)”列和“代號(hào)”列。EPLAN的可選屬性雖然多,但找不到所需要的屬性??蛻魹榇烁械嚼_。
單身美女常說(shuō)“這么多男生,沒(méi)有一個(gè)是我愛(ài)的”,此時(shí)的客戶心里說(shuō)“這么多屬性,沒(méi)有一個(gè)是我要的”。
找不到想要的屬性該怎么辦呢?昌暉儀表給想了兩個(gè)辦法:簡(jiǎn)單的辦法、高效的辦法。簡(jiǎn)單的意思是動(dòng)腦少一些;高效的意思是動(dòng)手少一些。按照《高效能人士的七個(gè)習(xí)慣》中的觀點(diǎn),“個(gè)人永遠(yuǎn)有選擇的自由”、“個(gè)人應(yīng)為自己的選擇負(fù)責(zé)(不怨天不尤人)”。因此,哪種方法適合你,取決于你自己的選擇。
方法一:使用一個(gè)新的屬性
既然找不到現(xiàn)成的可用屬性,那我就使用一個(gè)另外的屬性,比如Structure Description 2<1007>(結(jié)構(gòu)描述2),將其插入到報(bào)表表格中。
通過(guò)主菜單“項(xiàng)目數(shù)據(jù)→結(jié)構(gòu)標(biāo)識(shí)符管理”,打開對(duì)話框。點(diǎn)擊鼠標(biāo)右鍵,如標(biāo)記① ;選擇“配置顯示”,如標(biāo)記② ,將屬性Structure Description 2<1007>(結(jié)構(gòu)描述2)添加到對(duì)話框中。
對(duì)于高層代號(hào),這一列的值應(yīng)該填寫等號(hào)(=);對(duì)于位置代號(hào),這一列的值應(yīng)該填寫(+);對(duì)于文檔類型,這一列應(yīng)該填寫(&)……填寫完成后,更新報(bào)表,想要的結(jié)果就出來(lái)了。
這種方法非常簡(jiǎn)單,但是有個(gè)缺點(diǎn)。比如從別的項(xiàng)目復(fù)制了圖紙過(guò)來(lái),或手工新增了新的結(jié)構(gòu)標(biāo)識(shí)符,要始終記得修改這里的Structure Description 2<1007>(結(jié)構(gòu)描述2),否則報(bào)表會(huì)有些地方是空缺的。
方法二:使用正則表達(dá)式
正則表達(dá)式的思路比較簡(jiǎn)單,找到一個(gè)屬性,比如Structure identifier <20000> / Complete structure identifier with preceding sign <1003>(結(jié)構(gòu)標(biāo)識(shí)符/帶前綴的完整結(jié)構(gòu)標(biāo)識(shí)符),把不需要的部分去除,只保留前綴即可。
打開表格,插入占位符文本,彈出對(duì)話框中選擇① 格式屬性/計(jì)算屬性,然后選擇所需要的屬性③ Structure identifier <20000> / Complete structure identifier with preceding sign <1003>(結(jié)構(gòu)標(biāo)識(shí)符/帶前綴的完整結(jié)構(gòu)標(biāo)識(shí)符),別忘記激活④ 替代文本,我使用的是“表格10”。
在項(xiàng)目屬性中,找到“塊屬性:替代文本[10]”,把值○│??_??@+=&#+$;│ 粘貼進(jìn)去,更新報(bào)表即可得到想要的結(jié)果。
相較于編程語(yǔ)言或增強(qiáng)文本編輯器,EPLAN的正則表達(dá)式有點(diǎn)半吊子。那么多好的正則引擎,偏偏它使用了一個(gè)很不咋地的ECMAScript。這個(gè)引擎支持的語(yǔ)法太少了,不夠強(qiáng)大。比如環(huán)視(LookAround)是很重要的語(yǔ)法,但EPLAN只支持肯定前視(Positive Lookahead)和否點(diǎn)前視(Negative Lookahead),不支持回顧。
本來(lái)按筆者最初想法,可以使用肯定回顧(Positive Lookback)語(yǔ)法(?<=[+=&#]).+$輕松解決,但是不成功,確認(rèn)半天是語(yǔ)法不支持。這個(gè)語(yǔ)法的意思是把[+=&#]后面的內(nèi)容去掉。最后不得不使用了一個(gè)排除表達(dá)式[^+=&#]+$,這個(gè)表達(dá)式有缺陷,如果遇到+A1+LOC1這種多層結(jié)構(gòu)時(shí)會(huì)有問(wèn)題,需要重新設(shè)計(jì)語(yǔ)法,好在這個(gè)客戶暫時(shí)沒(méi)有多層結(jié)構(gòu)。
期望EPLAN增強(qiáng)正則表達(dá)式功能,十年來(lái)筆者一直不曾放棄,它可以使得EPLAN更靈活和強(qiáng)大。成功,源自于不放棄!
共有訪客發(fā)表了評(píng)論
網(wǎng)友評(píng)論