; **********************************************************************
;                             CHGTEXT.LSP

;  Dieses Programm ersetzt jeden vorkommenden "alten String" durch den
;  "neuen String". Zuerst waehlen Sie den zu aendernden Text. Dann
;  werden Sie nach dem "alten String" und nach dem "neuen String"
;  gefragt. Nachdem die Aenderung vollzogen wurde, wird die Anzahl
;  der geaenderten Zeilen angezeigt.
; **********************************************************************

(defun chgterr (s)
   (if (/= s "Function cancelled")    ; Wenn ein Fehler (z.B.CTRL-C)
      (princ (strcat "\nError: " s)) ; auftritt, waehrend der Befehl
                                      ; aktiv ist
   )
   (setq p nil)                      ; Auswahlsatz loeschen
   (setq *error* olderr)             ; alte Fehlerroutine holen
   (princ)
)

(defun C:CHGTEXT (/ p l n e os as ns st s nsl osl sl si chf chm olderr)
   (setq olderr  *error*             ; Initialisieren der Variablen
         *error* chgterr
         chm     0)
   (setq p (ssget))                  ; Objekte waehlen
   (if p (progn                      ; Wenn Objekte gewaehlt...
      (while (= 0 (setq osl (strlen (setq os (getstring t "\nOld text: ")))))
            (princ "No invalid Entry")
      )
      (setq nsl (strlen (setq ns (getstring t "\nNew text: "))))
      (setq l 0 n (sslength p))
      (while (< l n)               ; Fuer jedes Objekt ...
         (if (= "TEXT"             ; Suchen nach TEXT Elementen(Gruppe 0)
                (cdr (assoc 0 (setq e (entget (ssname p l))))))
            (progn
               (setq chf nil si 1)
               (setq s (cdr (setq as (assoc 1 e))))
               (while (= osl (setq sl (strlen
                             (setq st (substr s si osl)))))
                  (if (= st os)
                      (progn
                        (setq s (strcat (substr s 1 (1- si)) ns
                                        (substr s (+ si osl))))
                        (setq chf t) ; Alten String finden
                        (setq si (+ si nsl))
                      )
                      (setq si (1+ si))
                  )
               )
               (if chf (progn        ; Alten durch neuen String ersetzen
                  (setq e (subst (cons 1 s) as e))
                  (entmod e)         ; TEXT Element modifizieren
                  (setq chm (1+ chm))
               ))
           )
         )
         (setq l (1+ l))
      )
   ))
 (princ chm)
 (princ " Text-String(s) changed ") ; Anzahl der geaenderten Zeilen
(terpri)
   (setq *error* olderr)             ; alte Fehlerfunktion holen
   (princ)
)
