AutoLisp 2021 обрабатывает регулярное выражение иначе, чем 2019 - PullRequest
0 голосов
/ 26 мая 2020

У нас есть функция, вызываемая через реактор вставки ввода для обработки некоторого текста в чертеже. Мы получаем разные результаты, используя Autodesk 2021 из сценария, перенесенного с 2019 года, и я не могу понять, почему есть разница. Сценарий ниже:

;; 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

Результат (для 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

Похоже, функция возвращает ошибку или возвращает первый разрыв строки, который она получает и завершает, хотя в отладчике я вижу обрабатываемые пары регулярных выражений. Я не понимаю, почему в новой версии есть разница? Большое спасибо за вашу помощь.

1 Ответ

1 голос
/ 27 мая 2020

Это вызвано новой поддержкой символов AutoLISP Unicode, представленной в AutoCAD 2021, наряду с введением VS Code в качестве основного редактора AutoLISP.

Чтобы вернуться к поведению, демонстрируемому AutoCAD 2020 и ранее, вы можете установить для новой системной переменной LISPSYS значение 0:

LISPSYS (системная переменная)

Управляет средой разработки AutoLISP по умолчанию и редактор, запущенный с командой VLISP.


0

Visual LISP IDE (VLIDE) установлена ​​в качестве редактора по умолчанию, однако функции AutoLISP не полностью поддерживают символы Unicode. Исходные файлы AutoLISP (LSP) при сохранении и компиляции используют набор символов ASCII (MBCS). Примечание. Этот параметр влияет на поведение AutoCAD 2020 и более ранних версий и поддерживается только в Windows.


1

Код Visual Studio (VS) установлен в качестве редактора по умолчанию, а функции AutoLISP полностью поддерживают символы Unicode. Исходные файлы AutoLISP (LSP) при сохранении используют кодировку, установленную в VS Code, а при компиляции - набор символов Unicode.


2

Код Visual Studio (VS) установлен в качестве редактора по умолчанию, а функции AutoLISP полностью поддерживают символы Юникода. Исходные файлы AutoLISP (LSP) при сохранении используют кодировку, установленную в VS Code, а при компиляции - набор символов ASCII (MBCS).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...