【发布时间】:2020-09-12 17:38:04
【问题描述】:
我们有一个函数,通过输入粘贴反应器调用来处理绘图中的一些文本。我们从 2019 年迁移的脚本中使用 Autodesk 2021 得到了不同的结果,我无法弄清楚为什么会有差异。脚本如下:
;; GDD parser to remove unnecessary info from the paste to prepare for processing
;; Modified Lee mac's unformat function - removes formatting from a string
(defun GDD:removeinfo ( rgx str )
(if
(null
(vl-catch-all-error-p
(setq str
(apply
'(lambda nil
(vlax-put-property rgx 'global actrue)
(vlax-put-property rgx 'multiline actrue)
(vlax-put-property rgx 'ignorecase acfalse)
(foreach pair
'(
("\\032" . "\\\\\\\\")
("\n" . "\\\\P")
("$1" . "\\\\(\\\\[ACcFfHKkLlOopQTW])|\\\\[ACcFfHKkLlOopQTW][^\\\\;]*;|\\\\;[ACcFfKkHLlOopQTW]")
("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
("$1$2" . "\\\\(\\\\S)|[\\\\](})|}")
("$1" . "[\\\\]({)|{")
("\\$1$2$3" . "(\\\\[ACcFfHKkLlOoPpQSTW])|({)|(})")
("\\\\" . "\032")
;; Added from LMs original quickunformat
("" . "(?:.*\\n)*Const\\s+.*\\n")
("" . "\\w\\w\\d?\\s+\\d+\\s\\d+-\\d+-\\d+")
("" . "^\\s+\\n")
)
(vlax-put-property rgx 'pattern (cdr pair))
(setq str (vlax-invoke rgx 'replace str (car pair)))
)
) nil
)
)
)
)
str
(prompt (strcat "\nError: " (vl-catch-all-error-message str)))
)
)
粘贴的输入字符串是:
Ranford Rd, Perth WA, Australia
Clear Markers
-3773641.56683170, 12902093.08140300 | 0, 01 feature(s) selected on 1 layer(s)1:
2256.9944
979.35 x 559.54 m
Attribute Value
SUBTYPE ROUTE
ATTRIBUTE
TLS_ID 15006025041
Date 30-06-1997
Length 231.0
Shared NO
Const MULTI-CONDUIT
AA P100 312F - SMOF FNPEHJC/STDCNVL F CNVL 4701:CNVL AD-CNVL AE/1-312
312F - SMOF FNPEHJ/STD CNVL F HILN 4602:CNVL AE-CNVL BW/1-312
120F - SMOF FNPEHJ/STD CNVL F BATA 1001:CNVL AE-CNVL CR/1-120
24F - SMOF FNPEHJ CNVL F CNVL 1001:CNVL AD-CNVL AE/1-24
12F - SMOF FNPEHJC/STDCNVL F BATA 1001:CNVL DL-CNVL HX/1-12
AB P100 200 0.40 CPFUT MB CNVL CA1:B1901-2100
AA 15038127628 30-06-1997
AB 15038127629 30-06-1997
函数中的输出(for str)应该是:
AA P100 312F - SMOF FNPEHJC/STDCNVL F CNVL 4701:CNVL AD-CNVL AE/1-312
312F - SMOF FNPEHJ/STD CNVL F HILN 4602:CNVL AE-CNVL BW/1-312
120F - SMOF FNPEHJ/STD CNVL F BATA 1001:CNVL AE-CNVL CR/1-120
24F - SMOF FNPEHJ CNVL F CNVL 1001:CNVL AD-CNVL AE/1-24
12F - SMOF FNPEHJC/STDCNVL F BATA 1001:CNVL DL-CNVL HX/1-12
AB P100 200 0.40 CPFUT MB CNVL CA1:B1901-2100
但是,当我们在 Autodesk 2021 中使用相同输入处理此函数时,输出(对于 str)为:
Ranford Rd, Perth WA, Australia
看起来函数错误或在它接收并退出的第一个换行符处返回,尽管在调试器中我可以看到正在处理的正则表达式对。我不知道为什么新版本有什么不同?非常感谢您的帮助。
【问题讨论】:
-
这可能是在黑暗中拍摄,但请尝试在设置 LISPSYS=0 并重新启动 AutoCAD 2021 后运行它。
-
@LeeMac Spot 是个好主意并修复了它。我使用 Visual Studio Code (VSCODE) 作为我的调试器,因为它更易于使用并且似乎比 VLIDE 效果更好,尤其是在附加进程时(对于像我这样的新手)。我注意到在查看 Autodesk 的此注册表设置的解释时,vscode 使用 Unicode 而 vlide 没有,因此这将导致迁移正则表达式程序出现问题,我相信我不会是唯一一个。您能否写一个答案,我可以接受。再次感谢。