Zobrazit plnou verzi příspěvku: hromadné vložení tečky do textu

xJanik
09.06.2025, 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

Vladimír Michl
09.06.2025, 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

Petr75
09.06.2025, 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)

xJanik
10.06.2025, 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 ANSII tak děkuji

Petr75
10.06.2025, 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_4uploads/2271/Num_1_4.lsp

Jan Palička
10.06.2025, 10:09
Zkouším to v Civilu a funguje mi SRXTEXT2 s regulárním nahrazením
(\d)(\d{4})$1.$2

xJanik
11.06.2025, 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))