Vytisknout stránku | Zavřít okno

hromadné vložení tečky do textu

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: AutoCAD
Popis fóra: Otázky kolem aplikací AutoCAD a AutoCAD LT, AutoCAD 360, prohlížečů, DWG a DWF, Design Review, Navisworks, nadstavby, 123D, A360 a cloud Autodesk 360
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=35632
Datum vytištění: 13.čvc.2025 v 19:08


Téma: hromadné vložení tečky do textu
Odeslal: xJanik
Předmět: hromadné vložení tečky do textu
Datum odeslání: 09.čer.2025 v 09:58
Dobrý den, jde nějak hromadně vložit do textu tečka? Mám čísla o 5ti místech a tečku bych potřebovala dát na čtvrtou pozici. Zkoušela jsem v lisp numintext dát Multiply 0.001, ale nedaří se mi, pouze mi to číslo ořízne. Lze to nějak jinak?
Děkuji



Odpovědi:
Odeslal: Vladimír Michl
Datum odeslání: 09.čer.2025 v 14:15
Asi nejjednodušší je to vzít řetězcově - takže např. pomocí utility srxText - příkaz SRXTEXT2, regulární výraz:

hledat: (.*\d\d\d\d)(\d.*)
nahradit: $1.$2



-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: Petr75
Datum odeslání: 09.čer.2025 v 14:17
Dobrý den,
pokud jsou daná čísla jako text "XXXXX" a chcete vytvořit text "X.XXXX", tak můžete zkusit Lisp viz. níže. Předpokládám, že čtvrtou pozici jste myslel zprava. V dotazu tedy používáte násobení číslem 0.001, cože by tedy byla tečka na třetím místě zleva.

;;▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
(defun c:Num_1_4 (  / ss Num j en enList errorTrapNum)
;;↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
(defun errorTrapNum (errmsg)
(if (not (member errmsg '("console break" "Function Cancelled")))
(princ (strcat "\nError: " errmsg "\n"))
)                
(and (= (logand (getvar 'UNDOCTL) 8))
(command-s "_.undo" "_e")
)
(command-s "_.undo" "")
(setvar 'CMDECHO 1)
(setvar 'NOMUTT 0)
(setvar 'CLIPROMPTUPDATE 1)
(setq *error* temperr)
   (princ)
) ;defun errorTrapNum
;;↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

;;=========================
(and (= (logand (getvar 'UNDOCTL) 8))
(command-s "_.undo" "_e")
)
(setvar 'CMDECHO 0)
(command-s "_.undo" "_be")
(princ)
(setq temperr *error*)
(setq *error* errorTrapKM1)

(setq ss (ssget "_X" '((0 . "TEXT") (1 . "#####"))))
(if ss (progn
(setq j 0)
(repeat (sslength ss)
(setq en (ssname ss j))
(setq enList (entget en))
(setq num (cdr (assoc 1 enList)))
(setq num (strcat (substr num 1 1) "." (substr num 2 4)))
(entmod (subst (cons 1 num) (assoc 1 enList) enList))
(setq j (1+ j))
) ;repeat
)) ;if

(command-s "_.regen")
(command-s "_.undo" "_e")
(setvar 'NOMUTT 0)
(setvar 'CLIPROMPTUPDATE 1)
(setvar 'CMDECHO 1)
(setq *error* temperr)
(princ)
) ;defun _Num_1_4
;;▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
(princ)


Odeslal: xJanik
Datum odeslání: 10.čer.2025 v 08:33
Děkuji, ale nějak mi to nejde zprovoznit. Nenačte se, hlásí chybu: nedefinovaná funkce - command-s. Zkoušela jsem přepsat command-s za jen command, ale také nic. Kódování jsem zadala ANSI
I tak děkuji


Odeslal: Petr75
Datum odeslání: 10.čer.2025 v 08:55
Dobrý den,
předpokládám, že jste soubor uložila s příponou *.lsp". Pro jistotou přikládám soubor. Soubor načíst příkazem APLČTI a pak spustit příkaz NUM_1_4
uploads/2271/Num_1_4.lsp" rel="nofollow - uploads/2271/Num_1_4.lsp


Odeslal: Jan Palička
Datum odeslání: 10.čer.2025 v 10:09
Zkouším to v Civilu a funguje mi SRXTEXT2 s regulárním nahrazením

(\d)(\d{4})
$1.$2




Odeslal: xJanik
Datum odeslání: 11.čer.2025 v 10:41
Děkuji všem, nakonec vyřešeno s Copilotem

(defun c:ZMEN_CISLA ()
(vl-load-com)
(setq ss (ssget)) ; Výběr všech objektů
(if ss
    (progn
      (setq i 0)
      (while (< i (sslength ss))
        (setq ent (ssname ss i))
        (setq ent-data (entget ent))
        (setq txt (cdr (assoc 1 ent-data))) ; Načtení textové hodnoty
       
        (if (and txt (>= (strlen txt) 3)) ; Musí být alespoň 3 znaky dlouhý
          (progn
            (setq nova-hodnota (strcat (substr txt 1 2) "." (substr txt 3))) ; Vložení tečky

            ;; Změna textové hodnoty
            (setq ent-data (subst (cons 1 nova-hodnota) (assoc 1 ent-data) ent-data))
            (entmod ent-data)
            (entupd ent)
            (princ (strcat "\nZměněno: " txt " -> " nova-hodnota))
          )
          (princ (strcat "\nPřeskakuji: " txt " (méně než 3 znaky)"))
        )

        (setq i (1+ i))
      )
      (command "REGEN") ; Aktualizace AutoCADu
      (princ "\nHotovo.")
    )
    (princ "\nNebyl vybrán žádný objekt.")
)
(princ)
)



Vytisknout stránku | Zavřít okno