Ik heb volgende LISP-code om de tag van een attribuut in block editor te wijzigen:
(setq #ss (ssget "x" '((-4 . "<or") (2 . "current_attribute_tag") (-4 . "or>"))))
(setq #EntName (ssname #ss 0))
(setq #OldEntData (entget #EntName))
(setq #OldTag (assoc 2 #OldEntData))
(setq #NewTag (cons 2 "new_attribute_tag"))
(setq #NewEntData (subst #NewTag #OldTag #OldEntData))
(entmod #NewEntData)
Dat werkt prima wanneer er geen rechte haken in de huidige attribuut tag staan. Staan er rechte haken in de attribuut tag, dan geeft de ssget functie "nil" als return.
Heeft iemand daar een oplossing voor?
Bedoel je deze: "[" of "]"
Citaat van: gery op ma 16 03 2020, 14:24:15
Citaat van: EddyBeerke op ma 16 03 2020, 14:22:46
Bedoel je deze: "[" of "]"
Beide.
In de lisp van Joop F. Moelee (Babe.lsp op deze site te vinden) zit een interesant stukje code hiervoor:
;;;*=====================================================================
;;; Changes the Windows backslash into a forward slash =
;;; for processing by AutoCAD =
;;;*=====================================================================
(defun ChangeBackslash (PathToConvert /)
(setq PathToConvert (vl-string->list PathToConvert)
PathToConvert (subst 47 92 PathToConvert)
PathToConvert (vl-list->string PathToConvert)
) ;_ end of setq
) ;_ end of defun
In het gedeelte "(subst 47 92 PathToConvert)" wordt een karakter voor een andere vervangen.
Misschien kun je dit toepassen?
Moet je alleen even de karakter code weten.
Zou dat werken?
Als het gaat om het ssget filter:
"[" en "]" hebben een speciale betekenis in wcmatch patterns.
Ze worden gebruikt voor een character set.
Als je de 'rechte' haken letterlijk wilt matchen dan moet je ze 'escapen':
(2 . "`[abc`]")
Zie:
http://help.autodesk.com/view/ACD/2018/ENU/?guid=GUID-EC257AF7-72D4-4B38-99B6-9B09952A53AD
Citaat van: roy_043 op ma 16 03 2020, 17:03:27
Als het gaat om het ssget filter:
"[" en "]" hebben een speciale betekenis in wcmatch patterns.
Ze worden gebruikt voor een character set.
Als je de 'rechte' haken letterlijk wilt matchen dan moet je ze 'escapen':
(2 . "`[abc`]")
Dat is de oplossing, bedankt!
Citaat van: EddyBeerke op ma 16 03 2020, 16:45:15
;;;*=====================================================================
;;; Changes the Windows backslash into a forward slash =
;;; for processing by AutoCAD =
;;;*=====================================================================
(defun ChangeBackslash (PathToConvert /)
(setq PathToConvert (vl-string->list PathToConvert)
PathToConvert (subst 47 92 PathToConvert)
PathToConvert (vl-list->string PathToConvert)
) ;_ end of setq
) ;_ end of defun
Deze code kan ik gebruiken in een andere toepassing, bedankt!