OPGELOST: attribute tag met rechte haken wijzigen in LISP

Gestart door gery, ma 16 03 2020, 13:21:40

Vorige topic - Volgende topic

gery

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?
AutoCAD 2020 - Windows 10

EddyBeerke

Civil3d 2022, Blender 3.4 gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

gery

AutoCAD 2020 - Windows 10

EddyBeerke

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?
Civil3d 2022, Blender 3.4 gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

roy_043

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

gery

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!
AutoCAD 2020 - Windows 10

gery

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!
AutoCAD 2020 - Windows 10