国产精品色情一区二区三区_欧美一区综合_日韩中文字幕一区二区_日韩一区二区三区毛片_一级毛片视频免费_久久精品国产午夜伦班片

EPLAN中正則表達式的一則應用案例

2022/8/23 10:46:58 人評論 次瀏覽 分類:DCS  文章地址:http://www.gsipv.com/tech/4408.html

正則表達式(Regular Expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。正則表達式在編程界、增強文本編輯器界家喻戶曉,人盡皆知;在辦公界、工程設計界則聞者寥寥。知者不惑,受益頗多;不知者無過,沒啥損失。

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更靈活和強大。成功,源自于不放棄!

共有訪客發表了評論 網友評論

  客戶姓名:
郵箱或QQ:
驗證碼: 看不清楚?