; das Hauptprogramm UPDATE (defun C:UPDATE () (LESEN) (ATTLISTE) (NDERE-NAMEN) ) ; die Prozedur LESEN zum Einlesen der nderungen (defun LESEN () (setq datei-inhalt ()) (setq datei (open "g:\prog\acad\menu1\test.pos" "r")) (setq zeile (read-line datei)) (while zeile (setq positi (substr zeile 2 6)) (setq nummer (substr zeile 8 30)) (setq zeilen-liste (list positi nummer)) (setq datei-inhalt (cons zeilen-liste datei-inhalt)) (setq zeile (read-line datei)) ) (close datei) ) ; die Prozedur ATTLISTE findet die Blockeinfgungen in der Datenbank (defun ATTLISTE () (setq eigenschafts-liste ()) (setq e (entnext)) (while e (setq typ (cdr (assoc 0 (entget e)))) (setq blockname (cdr (assoc 2 (entget e)))) (if (and (equal typ "INSERT") (equal (cdr (assoc 66 (entget e))) 1) ) (EIGENSCHAFTSLISTE-BILDEN e) ) (setq e (entnext e)) ) ) ; die Prozedur EIGENSCHAFTSLISTE-BILDEN ermittelt die wichtigen Daten aus ; der Datenbank (defun EIGENSCHAFTSLISTE-BILDEN (e) (setq db-liste ()) (while (not (equal (cdr (assoc 0 (entget e))) "SEQEND")) (cond ((cdr (assoc 66 (entget e))) (setq db-liste ()) (setq satz-liste ()) (setq satz-liste (cons (cdr (assoc -1 (entget e))) satz-liste)) (setq satz-liste (cons (cdr (assoc 2 (entget e))) satz-liste)) (setq db-liste (cons satz-liste db-liste)) ) ((equal (cdr (assoc 0 (entget e))) "ATTRIB") (setq satz-liste ()) (setq satz-liste (cons (cdr (assoc 1 (entget e))) satz-liste)) (setq satz-liste (cons (cdr (assoc 2 (entget e))) satz-liste)) (setq db-liste (cons satz-liste db-liste)) (if (equal (cdr (assoc 2 (entget e))) "POSITION") (setq schlssel (cdr (assoc 1 (entget e)))) ) ) ) (setq e (entnext e)) ) (setq db-liste (reverse db-liste)) (setq db-liste (cons schlssel db-liste)) (setq eigenschafts-liste (cons db-liste eigenschafts-liste)) ) ; die Prozedur NDERE-NAMEN fhrt die nderung aus (defun NDERE-NAMEN () (setq eingabe-liste datei-inhalt) (while eingabe-liste (setq vergleichs-liste (car eingabe-liste)) (setq eingabe-liste (cdr eingabe-liste)) (setq positi (car vergleichs-liste)) (setq name (last vergleichs-liste)) (cond ((assoc positi eigenschafts-liste) (setq attribut-liste (assoc positi eigenschafts-liste)) (setq e-zu-ndern (last (cadr attribut-liste))) (while (not (equal (cdr (assoc 0 (entget e-zu-ndern))) "SEQEND")) (setq attribut-bezeichnung (cdr (assoc 2 (entget e-zu-ndern)))) (cond ((equal attribut-bezeichnung "POSITION") (entmod (subst (cons '1 name) (assoc 1 (entget e-zu-ndern)) (entget e-zu-ndern))) (entupd e-zu-ndern) ) ) (setq e-zu-ndern (entnext e-zu-ndern)) ) ) ) ) )