Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Gewählte Dateien einfügen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Gewählte Dateien einfügen (403 / mal gelesen)
Danillo
Mitglied
Bauingenieur


Sehen Sie sich das Profil von Danillo an!   Senden Sie eine Private Message an Danillo  Schreiben Sie einen Gästebucheintrag für Danillo

Beiträge: 229
Registriert: 12.11.2003

Windows 10 - AutoCAD 2023

erstellt am: 06. Jun. 2022 20:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,
ich möchte mehrere dxf-Dateien als Block in eine Zeichnung einfügen, wobei aber der Benutzer die Dateien auf der Festplatte wählen können sollte. Die Anzahl der Dateien kann dabei unterschiedlich sein, d.h. einmal 4, ein anderes Mal z.B. 8.

Wäre super, wenn mir jemand einen Tipp geben könnte.

Meine Alternative wäre sonst, dass der Dateiname und der Pfad fix vorgeben sind, und ich mit LISP dort die Datein "abhole". Diese Vorgehensweise ist aber sehr eingeschränkt und anfällig auf Fehler/Ungenauigkeiten im Dateinamen.

Viele Grüße
Daniel

------------------
Windows 10 - AutoCAD 2017

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Vino
Mitglied



Sehen Sie sich das Profil von Vino an!   Senden Sie eine Private Message an Vino  Schreiben Sie einen Gästebucheintrag für Vino

Beiträge: 207
Registriert: 24.05.2005

Windows 10
BricsCAD V20-22

erstellt am: 07. Jun. 2022 08:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Danillo 10 Unities + Antwort hilfreich

Hallo,

unter Lisp gibt es die Funktion GETFILED um den Benutzer Dateien auswählen zu lassen.
Meines Wissens geht das aber immer nur mit einer einzelnen Datei.

Um mehrere Dateien in einem Dialog auswählen zu können, wäre z.B. DAS HIER eine Möglichkeit.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Peter2
Ehrenmitglied V.I.P. h.c.




Sehen Sie sich das Profil von Peter2 an!   Senden Sie eine Private Message an Peter2  Schreiben Sie einen Gästebucheintrag für Peter2

Beiträge: 3701
Registriert: 15.10.2003

Win 10/64 Pro
AutoCAD MAP 3D 2018
BricsCAD 22

erstellt am: 07. Jun. 2022 10:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Danillo 10 Unities + Antwort hilfreich

DosLib hat auch Funktionen für merhfache Dateiwahl: https://wiki.mcneel.com/doslib/home
---

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Niggemann
Mitglied



Sehen Sie sich das Profil von Niggemann an!   Senden Sie eine Private Message an Niggemann  Schreiben Sie einen Gästebucheintrag für Niggemann

Beiträge: 159
Registriert: 31.10.2003

Win 98 Se, ACAD 2004, XP Prof, ACAD 2004 und ACAD 2010

erstellt am: 07. Jun. 2022 18:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Danillo 10 Unities + Antwort hilfreich

Das gib es, hab ich mir 2003 mal zum Umbennen von Dateien
geschrieben du müßtes dir nur die Funktion zum einfügen noch anhängen
und das Programm auf deine Bedürfnisse anpassen.
Gruß
Niggemann
; die ersten ca. 500 zeilen stammen aus dem Internet von einem unbekannten Autor
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; STEUERUNG DER DATEIEN-AUSWAHL-DIALOGBOX                                    ;
;;;----------------------------------------------------------------------------;
;;;      Funktion:  EARX:AUX:FILE-DIALOG                                      ;
;;;                                                                            ;
;;;  Beschreibung:                                                            ;
;;;                                                                            ;
;;;    1. Argument:  FMUSTER  = Dateiendung der auszuwählenden Dateien        ;
;;;                                                                            ;
;;;    2. Argument:  TITEL    = Inhalt der Titelzeile                          ;
;;;                                                                            ;
;;;    3. Argument:  MOTTO    = Inhalt der obersten Dialogzeile                ;
;;;                                                                            ;
;;;                                                                            ;
;;;  Rückgabewert:  Eine Liste mit den Namen inkl. Pfad, der ausgewählten    ;
;;;                  Dateien                                                  ;
;;;                                                                            ;
;;;        Aufruf:  (EARX:AUX:FILE-DIALOG "*.DWG" "Beispiel" "Dateien wählen");
;;;----------------------------------------------------------------------------;
(vl-load-com); damit die Fehlermeldungen auch Akustisch dargestellt werden

(defun EARX:AUX:FILE-DIALOG
(
;;;Deklaration von Aufruf-Parametern
;  FMUSTER                              ;Dateiendung der auszuwählenden Dateien
;  TITEL                                ;Inhalt der Titelzeile
;  MOTTO                                ;Inhalt der obersten Dialogzeile
  /
;;;Deklaration von lokalen Funktionen
  EARX:ADD                            ;
  EARX:ALLSEL                          ;
  EARX:ALLSEL_LIS                      ; Entfernen aller einträge aus der Liste "LIS"
  EARX:CHKOPT                          ;
  EARX IRCHK                          ;
  EARX RVCHK                          ;
  EARX RIVE-LETTERS                  ;
  EARX:FILCHK                          ;
  EARX:GETDIRS                        ;
  EARX:GETDRVS                        ;Liste der vorhandenen Laufwerke erzeugen
  EARX:GETFILS                        ;
  EARX:LISTDIRS                        ;
  EARX:LISTDRVS                        ;
  EARX:LISTFILS                        ;
  EARX:LISTSEL                        ;
  EARX:LISTWORK                        ;
  EARX:LISTCHK                        ;
  EARX:MPREV                          ;
  EARX:REM                            ;
  EARX:UNSEL                          ;
;;;Deklaration von lokalen Variablen
  DIRLIST                              ;
  DIRTXT                              ;
  EARX_ALL                            ;
  EARX_DAT                            ;
  EARX_CURDIR                          ;
  EARX_CURDRV                          ;
  EARX_REM                            ;
  EARX_SLL                            ;
;  FILE_LIST                            ;wird unten nil gesetzt
  FILTXT                              ;
  LAUFWERKSLISTE                      ;
  LAUFWERKSNAME                        ;
  PREVLIST                            ;
  SELTXT                              ;
  VERZEICHNISNAME                      ;
)
;;; Die Übergabe Variablen erstellen
(setq MOTTO  "Dateien zum Umbennen wählen" ;Meldung für Dialogbox
      LOG_VAL "1"  ;Vorbelegung für Logdatei schreiben, hier immer aktiv
      MIN_VAL "1"  ;Vorbelegung für Minimieren bei Programmausführung, hier immer aktiv
;      FMUSTER  (strcat "*." SUCH_ERW)
      TITEL  "Dialogbox für Mehrfachdateiauswahl"
      ;WORK_LIST (EARX:AUX:FILE-DIALOG "*.DWG" "Dialogbox für Mehrfachdateiauswahl" MOTTO)
;      WORK_LIST (EARX:AUX:FILE-DIALOG (strcat "*." SUCH_ERW) "Dialogbox für Mehrfachdateiauswahl" MOTTO)
);setq
;;;----------------------------------------------------------------------------;
;;;D E F I N I T I O N  D E R  L O K A L E N  U N T E R F U N K T I O N E N ;
;;;----------------------------------------------------------------------------;

;;; Ermitteln der Laufwerksbuchstaben                                          ;
;;;      Funktion:  EARX RIVE-LETTERS                                        ;
;;;  Beschreibung:  Ermittlung der verfügbaren Laufwerke als Buchstabenliste  ;
(defun EARX RIVE-LETTERS (/
  FSOBJ          ;Das Scripting.FileSystemObject
  DRIVE          ;Laufwerks-Variable für Schleifenbearbeitung
  DRIVES        ;Die für FSOBJ zugänglichen Laufwerke
)
;;Erstellen der Laufwerksliste
(setq LAUFWERKSLISTE nil
      FSOBJ (vlax-create-object "Scripting.FileSystemObject")
) ;_ Ende von setq
(vlax-for DRIVE (setq DRIVES (vlax-get-property FSOBJ 'Drives))
  (setq LAUFWERKSLISTE (cons (vlax-get-property DRIVE 'DriveLetter) LAUFWERKSLISTE))
) ;_ Ende von vlax-for
(vlax-release-object DRIVES)
(vlax-release-object FSOBJ)
(setq LAUFWERKSLISTE (reverse LAUFWERKSLISTE))
) ;_ Ende von defun

;;; LISTE DER VORHANDENEN LAUFWERKE ERZEUGEN                                  ;
;;;      Funktion:  EARX:GETDRVS                                              ;
(defun EARX:GETDRVS (/ DRIVE_LISTE )
  (setq LAUFWERKSLISTE nil)
  (if (null (setq DRIVE_LISTE (EARX RIVE-LETTERS)))
  (setq LAUFWERKSLISTE
    '("C:"  "D:"  "E:"  "F:"  "G:"
      "H:"  "I:"  "J:"  "K:"  "L:"
      "M:"  "N:"  "O:"  "P:"  "Q:"
      "R:"  "S:"  "T:"  "U:"  "V:"
      "W:"  "X:"  "Y:"  "Z:"
    )
  ) ;_ Ende von setq
  (progn
    (setq LAUFWERKSLISTE '())
    (foreach BUCHSTABE DRIVE_LISTE
    (setq LAUFWERKSLISTE (cons (strcat BUCHSTABE ":" ) LAUFWERKSLISTE))
    )
    (setq LAUFWERKSLISTE (reverse LAUFWERKSLISTE))
  )
  ) ;_ Ende von
) ;_ Ende von defun

;;; INITIALISIERUNG LAUFWERKSLISTE IN POPUP_LIST "DRV"                        ;
;;;      Funktion:  EARX:LISTDRVS                                            ;
;;;      Argumente:  CURDRV = Ein String im Format:                            ;
;;;                          "Einzelner Laufwerksbuchstabe" + ":"            ;
;;;                                                                            ;
(defun EARX:LISTDRVS (CURDRV)
  (EARX:GETDRVS)
  (setq LAUFWERKSLISTE (cons CURDRV (vl-remove CURDRV LAUFWERKSLISTE)))
  (start_list "DRV")
  (mapcar 'add_list LAUFWERKSLISTE)
  (end_list)
) ;_ Ende von defun

;;; POPUP_LIST "DRV" AUSWERTEN UND NEUE VERZEICHNISSE UND DATEIEN ANZEIGEN    ;
;;;      Funktion:  EARX RVCHK                                              ;
;;;                                                                            ;
;;;  Beschreibung:  Sucht anhand der Zeigernummer den betreffenden Eintrag    ;
;;;                  aus der statischen Variablen LAUFWERKSLISTE              ;
(defun EARX RVCHK ($VALUE)
  (setq LAUFWERKSNAME (strcat (nth (atoi $VALUE) LAUFWERKSLISTE) (chr 92))
        PREVLIST      (list LAUFWERKSNAME)
  ) ;_ Ende von setq
  (setq VERZEICHNISNAME LAUFWERKSNAME)
  (EARX:LISTDRVS (nth (atoi $VALUE) LAUFWERKSLISTE)) ;Laufwerke
  (EARX:LISTDIRS VERZEICHNISNAME) ;Verzeichnisse
  (EARX:LISTFILS VERZEICHNISNAME) ;Dateien
) ;_ Ende von defun

;;; ZU PROGRAMMBEGINN  P R E V L I S T  AUS  E A R X _ C U R D I R  GENERIEREN ;
;;;      Funktion:  EARX:MPREV                                                ;
;;;      Argumente:  DRVNAME = Ein String im Format "LW:\DIR\SUB"              ;
(defun EARX:MPREV (DRVNAME / NODRV NEXTPREV NEXTCHR)
  (setq LAUFWERKSNAME (substr DRVNAME 1 3)
        NODRV        (substr DRVNAME 4)
  ) ;_ Ende von setq
  (setq PREVLIST (cons LAUFWERKSNAME PREVLIST))
  (setq NEXTPREV LAUFWERKSNAME)
  (if NODRV
  (progn
    (repeat (strlen NODRV)
    (if
      (and
      (/= (ascii (setq NEXTCHR (substr NODRV 1 1))) 92)
      (/= (ascii (setq NEXTCHR (substr NODRV 1 1))) 47)
      ) ;_ Ende von and
      (setq NEXTPREV (strcat NEXTPREV NEXTCHR)
            NODRV    (substr NODRV 2)
      ) ;_ Ende von setq
      (progn
      (setq NEXTPREV (strcat NEXTPREV (chr 92))
            NODRV    (substr NODRV 2)
      ) ;_ Ende von setq
      (setq PREVLIST (cons NEXTPREV PREVLIST))
      ) ;_ Ende von progn
    ) ;_ Ende von if
    ) ;_ Ende von repeat
  ) ;_ Ende von progn
  ) ;_ Ende von if
) ;_ Ende von defun

;;; LISTE DER UNTERVERZEICHNISSE DES VERZEICHNISSES DNAME                      ;
;;;      Funktion:  EARX:GETDIRS                                              ;
;;;  Beschreibung:  Kein Dateimuster, nur Verzeichnisse                      ;
;;;      Argumente:  DNAME = Ein String im Format "LW:\DIR\SUB"                ;
(defun EARX:GETDIRS (DNAME / NLIST)
  (setq DIRLIST (vl-directory-files DNAME nil -1));-1 = nur Verzeichnisse
  (foreach ITEM DIRLIST
  (setq NLIST (cons (strcase ITEM T) NLIST))
  )
  (setq NLIST (vl-remove "." NLIST))
  (setq NLIST (vl-remove ".." NLIST))
  (setq DIRLIST (cons ".." (vl-sort NLIST '< )))
  (if (= (setq DIRTXT (strcat (itoa (length NLIST)) " Verzeichnisse")) "1 Verzeichnisse")
  (setq DIRTXT "1 Verzeichniss")
  )
  (set_tile "DIRTXT" DIRTXT)
) ;_ Ende von defun

;;; LISTE DER UNTERVERZEICHNISSE IN LIST_BOX "DIR"                            ;
;;;      Funktion:  EARX:LISTDIRS                                            ;
;;;      Argumente:  DNAME = Ein String im Format "LW:\DIR\SUB"                ;
(defun EARX:LISTDIRS (DNAME)                              ;Ein String im Format "LW:\DIR\SUB"
  (EARX:GETDIRS DNAME)
  (start_list "DIR")
  (mapcar 'add_list DIRLIST)
  (end_list)
  (set_tile "CUR" DNAME)
) ;_ Ende von defun

;;; LIST_BOX "DIR" AUSWERTEN UND NEUE DATEIEN ANZEIGEN                        ;
;;;      Funktion:  EARX IRCHK                                              ;
(defun EARX IRCHK ($VALUE / VNAME) ; $VALUE ;ohne gehts!!!
  (setq VNAME (nth (atoi $VALUE) DIRLIST))
  (if (= VNAME "..")
;;;Option: Zurück zum Hauptverzeichnis
  (if (= (length PREVLIST) 1)
;;;Kein Zurück weil Root
    (progn
    (setq VERZEICHNISNAME LAUFWERKSNAME)
    ) ;_ Ende von progn
;;;Zurück ausführen
    (progn
    (setq VERZEICHNISNAME (cadr PREVLIST))
    (setq PREVLIST (cdr PREVLIST))
    ) ;_ Ende von progn
  ) ;_ Ende von if
;;;Option: Weiter zum Unterverzeichnis
  (progn
    (setq VERZEICHNISNAME (strcat (car PREVLIST) VNAME (chr 92)))
    (setq PREVLIST (cons VERZEICHNISNAME PREVLIST))
  ) ;_ Ende von progn
  ) ;_ Ende von if
  (EARX:LISTDIRS VERZEICHNISNAME) ;Verzeichnisliste auffrischen
  (EARX:LISTFILS VERZEICHNISNAME) ;Dateienliste auffrischen
) ;_ Ende von defun

;;; DATEIEN DES VERZEICHNISSES FNAME                                          ;
;;;      Funktion:  EARX:GETFILS                                              ;
;;;      Argumente:  FNAME = Ein String im Format "LW:\DIR\SUB"                ;
(defun EARX:GETFILS (FNAME / X)
  (setq EARX_ALL (vl-directory-files FNAME FMUSTER 1));! 1 = Files only!
;;;Durch verwendung von FMUSTER auch andere Dateiformate möglich!
  (setq
  EARX_ALL
  (vl-sort
    (vl-remove-if-not
;;;strcase um groß-klein Unterscheidung von WINDOWS NT4 abzufangen!
    '(lambda (X) (wcmatch (strcase X) FMUSTER))
    EARX_ALL
    ) ;_ Ende von REMOVE-IF-NOT
  '<
  ) ;_ Ende von SORT
  ) ;_ Ende von setq
  (if (>= (length EARX_ALL) 1)
  (mode_tile "S_A" 0)
  (mode_tile "S_A" 1) ;Ausgrauen wenn keine Dateien
  ) ;_ Ende von if
  (if (= (setq FILTXT (strcat (itoa (length EARX_ALL)) " Dateien")) "1 Dateien")
  (setq FILTXT "1 Datei")
  )
  (set_tile "FILTXT" FILTXT)
) ;_ Ende von defun

;;;DATEILISTE IN LIST_BOX "FIL" MIT ABFANG FÜR "KEINE DATEIEN"                ;
;;;      Funktion:  EARX:LISTFILS                                            ;
;;;      Argumente:  FNAME = Ein String im Format "LW:\DIR\SUB"                ;
(defun EARX:LISTFILS (FNAME)
  (EARX:GETFILS FNAME)
  (if (/= EARX_ALL '(""))
  (progn
    (start_list "FIL")
    (mapcar 'add_list EARX_ALL)
    (end_list)
  ) ;_ Ende von progn
  (progn
    (start_list "FIL")
    (add_list '(""))
    (end_list)
  ) ;_ Ende von progn
  ) ;_ Ende von if
) ;_ Ende von defun

;;; LIST_BOX "FIL" AUSWERTEN                                                  ;
;;;      Funktion:  EARX:FILCHK                                              ;
(defun EARX:FILCHK (EARX_FILE_LIST)
  (EARX:LISTSEL EARX_FILE_LIST)
  (if (= (length EARX_SLL) (length EARX_ALL))
  (mode_tile "S_A" 1)
  (mode_tile "S_A" 0)
  ) ;_ Ende von if
  (if (= (length EARX_ALL) 0)
  (mode_tile "S_A" 1)
  ) ;_ Ende von if
  (if (/= (get_tile "FIL") "")
  (progn
    (mode_tile "ADD" 0)(mode_tile "C_A" 0)
  ) ;_ Ende von progn
  (progn
    (mode_tile "ADD" 1)(mode_tile "C_A" 1)
  ) ;_ Ende von progn
  ) ;_ Ende von if
) ;_ Ende von defun

;;; MEHRFACHWAHL IN LIST_BOX "FIL" AUSWERTEN UND AUFZÄHLUNG IN LISTE VERWANDELN;
;;;      Funktion:  EARX:LISTSEL                                              ;
(defun EARX:LISTSEL (EARX_FILE_LIST / EARX_ITEM EARX_INDEX)
;;;Holt String mit Aufzählung der Nummern der gewählten Einträge
  (setq EARX_SLL  (list))
;;;Leerzeichen hinter Aufzählung setzen
  (setq EARX_INDEX  1
        EARX_ITEM  ""
        EARX_FILE_LIST (strcat EARX_FILE_LIST " ")
  ) ;_ Ende von setq
;;;Solange Ende der Aufzählung noch nicht erreicht
  (while (/= EARX_INDEX (1+ (strlen EARX_FILE_LIST)))
  (if (/= (substr EARX_FILE_LIST EARX_INDEX 1) " ")
;;;Wenn nicht " " - an vorheriges Zeichen anhängen - Ermöglicht mehrstellige Zähler
    (setq EARX_ITEM (strcat EARX_ITEM (substr EARX_FILE_LIST EARX_INDEX 1)))
;;;Wenn " " -> Zahl abgeschlossen - betreffendes Element anhand der Nummer aus
;;;EARX_ALL holen und in EARX_SLL vorne anfügen
    (progn
    (setq EARX_SLL (cons (nth (atoi EARX_ITEM) EARX_ALL) EARX_SLL)
          EARX_ITEM ""
    )
    ) ;_ Ende von progn
  ) ;_ Ende von if
  (setq EARX_INDEX (1+ EARX_INDEX))
  ) ;_ Ende von while
  (setq EARX_SLL (vl-sort EARX_SLL '< ))
  (setq FILTXT
        (strcat (itoa (length EARX_SLL))
        " von "
        (itoa (length EARX_ALL))
        " Dateien gewählt"
        )
  )
  (set_tile "FILTXT" FILTXT)
) ;_ Ende von defun

;;; ALLE DATEIEN AUSWÄHLEN                                                    ;
;;;      Funktion:  EARX:ALLSEL                                              ;
(defun EARX:ALLSEL (/ EARX_INDEX  EARX_INDEX_STR )
  (setq EARX_INDEX 0 EARX_INDEX_STR "")
  (repeat (length EARX_ALL)
  (set_tile "FIL" (itoa EARX_INDEX))
  (setq EARX_INDEX_STR (strcat EARX_INDEX_STR (itoa EARX_INDEX) " ")
        EARX_INDEX    (1+ EARX_INDEX)
  ) ;_ Ende von setq
  ) ;_ Ende von repeat
  (mode_tile "S_A" 1)
  (mode_tile "C_A" 0)
  (mode_tile "ADD" 0)
  (EARX:LISTSEL EARX_INDEX_STR)
) ;_ Ende von defun

;;; ALLE DATEIEN ABWÄHLEN                                                      ;
;;;      Funktion:  EARX:UNSEL                                                ;
(defun EARX:UNSEL ()
  (set_tile "FIL" "")
  (mode_tile "C_A" 1)
  (mode_tile "S_A" 0)
  (mode_tile "ADD" 1)
  (setq EARX_SLL '())
  (if (= (setq FILTXT (strcat (itoa (length EARX_ALL)) " Dateien")) "1 Dateien")
  (setq FILTXT "1 Datei")
  )
  (set_tile "FILTXT" FILTXT)
) ;_ Ende von defun

;;; ALLE DATEIEN aus der Arbeitsliste AUSWÄHLEN                                                    ;
;;;      Funktion:  EARX:ALLSELLIS                                              ;
(defun EARX:ALLSEL_LIS (/ REM_LIST )
  (setq REM_LIST FILE_LIST) 
  (if (> (length REM_LIST) 0)
      (progn
        (foreach X REM_LIST
          (setq FILE_LIST (vl-remove X FILE_LIST))
        ) ;_ Ende von foreach
        (setq EARX_REM '())
        (EARX:LISTWORK)
        (mode_tile "REM" 1)
    );Ende von progn
  );Ende von if 
); Ende von defun

;;; DATEIENLISTE IN LIST_BOX "LIS", DIE ARBEITSLISTE                          ;
;;;      Funktion:  EARX:LISTWORK                                            ;
(defun EARX:LISTWORK ()
  (start_list "LIS")
  (mapcar 'add_list FILE_LIST)
  (end_list)
  (if (> (length FILE_LIST) 0)
  (mode_tile "accept" 0);accept
  (mode_tile "accept" 1);accept
  ) ;_ Ende von if
  (if (= (setq SELTXT (strcat (itoa (length FILE_LIST)) " Dateien")) "1 Dateien")
  (setq SELTXT "1 Datei")
  )
  (set_tile "SELTXT" SELTXT)
) ;_ Ende von defun

;;; GEWÄHLTE DATEIEN ZU FILE_LIST HINZUFÜGEN                                  ;
;;;      Funktion:  EARX:ADD                                                  ;
;;;  Beschreibung:  Filtern von Doppeleinträgen durch vl-sort                ;
(defun EARX:ADD (/ PREVWORK NEW_ITEM )
  (if (> (length EARX_SLL) 0)
  (progn
    (foreach X EARX_SLL
    (if (not (member (setq NEW_ITEM (strcat (strcase VERZEICHNISNAME) (strcase X))) FILE_LIST))
      (setq FILE_LIST (cons NEW_ITEM FILE_LIST))
    )
    ) ;_ Ende von foreach
    (setq FILE_LIST (vl-sort FILE_LIST '< ))
    (EARX:LISTWORK)
    (mode_tile "ALL_REM" 0)
    (if (/= FILE_LIST (car PREVWORK))(setq PREVWORK (cons FILE_LIST PREVWORK))) ;_ Ende von if
    ;;Da die gewählten Dateien nun in der Arbeitsliste sind, wird die Auswahl zurück gesetzt
    (EARX:UNSEL)
  ) ;_ Ende von progn
  ) ;_ Ende von if
) ;_ Ende von defun

;;; GEWÄHLTE DATEIEN AUS FILE_LIST ENTFERNEN                                  ;
;;;      Funktion:  EARX:REM                                                  ;
(defun EARX:REM ()
  (if (> (length EARX_REM) 0)
  (progn
    (foreach X EARX_REM
    (setq FILE_LIST (vl-remove X FILE_LIST))
    ) ;_ Ende von foreach
    (setq EARX_REM '())
    (EARX:LISTWORK)
    (mode_tile "REM" 1)
;    (mode_tile "ALL_REM" 1)
  ) ;_ Ende von progn
  ) ;_ Ende von if
) ;_ Ende von defun

;;; MEHRFACHWAHL IN LIST_BOX "LIS" AUSWERTEN UND AUFZÄHLUNG IN LISTE VERWANDELN;
;;;      Funktion:  EARX:LISTCHK                                              ;
(defun EARX:LISTCHK  (FILE_TEXT / EARX_ITEM EARX_INDEX )
  (setq Test_a File_text)
;;;Holt String mit Aufzählung der Nummern der gewählten Einträge
  (setq EARX_REM '()
;;;Leerzeichen hinter Aufzählung setzen
        EARX_INDEX 1
        EARX_ITEM ""
        FILE_TEXT (strcat FILE_TEXT " ")
  ) ;_ Ende von setq
;;;Solange das Ende der Aufzählung noch nicht erreicht
  (while (/= EARX_INDEX (1+ (strlen FILE_TEXT)))
  (if (/= (substr FILE_TEXT EARX_INDEX 1) " ")
;;;Wenn nicht " " - an vorheriges Zeichen anhängen - Ermöglicht mehrstelligen Zähler
    (setq EARX_ITEM
          (strcat EARX_ITEM (substr FILE_TEXT EARX_INDEX 1))
    ) ;_ Ende von setq
;;;Wenn " " -> Zahl abgeschlossen - betreffendes Element anhand der Nummer aus
;;;FILE_LIST holen und in EARX_REM vorne anfügen
    (progn
    (setq
      EARX_REM (cons (nth (atoi EARX_ITEM) FILE_LIST) EARX_REM)
    ) ;_ Ende von setq
    (setq EARX_ITEM "")
    ) ;_ Ende von progn
  ) ;_ Ende von if
  (setq EARX_INDEX (1+ EARX_INDEX))
  ) ;_ Ende von while
  (if (/= (get_tile "LIS") "")
      (progn (mode_tile "REM" 0) (mode_tile "ALL_REM" 0))
      (progn (mode_tile "REM" 1)); (mode_tile "ALL_REM" 1))
  ) ;_ Ende von if
  (setq SELTXT (strcat (itoa (length EARX_REM)) " von " (itoa (length FILE_LIST)) " Dateien zum Entfernen gewählt"))
  (set_tile "SELTXT" SELTXT)
) ;_ Ende von defun

;;; OPTION LOGDATEI SCHREIBEN UND MINIMIEREN AUSWERTEN                        ;
;;;        Funktion:  EARX:CHKOPT                                              ;
(defun EARX:CHKOPT ()
  (if (= (get_tile "log") "1")(setq LOG_VAL "1")(setq LOG_VAL "0"))
  (if (= (get_tile "min") "1")(setq MIN_VAL "1")(setq MIN_VAL "0"))
  (setq NACH_DATUM (get_tile "NACH_DATUM"))
  (setq ERWEITERUNG (get_tile "ERWEITERUNG"))
)
(defun SUCHERW ()
  (setq ERW_LIST '("JPG" "DWG" "BAK" "PDF" "*" ))
  (start_list "SUCH_ERWEITERUNG")
  (mapcar 'add_list ERW_LIST)
  (end_list)
);ende defun SUCHERW
(defun CHECK_STARTWERT (WAS)
;    (if (= (vl-string-trim " " WAS) "")(progn (setq WAS "1")(set_tile "STARTWERT" WAS)))
    (if (wcmatch WAS "*@*,*.*,*[]`#`@`?`*`~`[´``'!%^&()+={}|`\\:;\"<>/]*");"*@*,*.*") ; wenn etwas ausser Zahlen Punkt und Komma
          (progn  ; dannausdruck   
              (set_tile "error" "Nur Nummeriche Werte größer \" 0 \" sind im Startwert erlaubt")
              (mode_tile "STARTWERT" 2)(mode_tile "STARTWERT" 3)
            (vlr-beep-reaction)
              nil
          ) ;ende progn
          (progn  ; sonstausdruck
            (set_tile "error" "")
            (setq STARTWERT (vl-string-trim " " WAS))
            T
          ) ; ende progn
      ); ende if
  ); ende defun CHECK_STARTWERT
;; Das Suchmuster in Großbuchstaben umwandeln
(defun SET_FMUSTER (WAS)
  (setq FMUSTER  (strcat (strcase WAS) "."(nth (atoi (get_tile "SUCH_ERWEITERUNG")) ERW_LIST)))
  (setq SUCH_DATEI (strcase WAS))
  (set_tile "SUCH_DATEI" (strcase WAS))
);ende defun SET_FMUSTER

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Hauptfunktion FILE-DIALOG                                                  ;
;;;----------------------------------------------------------------------------;
(setq EARX_DAT (load_dialog "UMBENNEN.DCL"))
(if (not (new_dialog "FSEL" EARX_DAT))
  (exit)
) ;_ Ende von if
(setq EARX_CURDIR      (getvar "DWGPREFIX")
      EARX_CURDRV      (substr EARX_CURDIR 1 2)
      VERZEICHNISNAME  EARX_CURDIR
      EARX_ALL        '()
      EARX_SLL        '()
      PREVLIST        '()
) ;_ Ende von setq
;;Die liste mit Dateinamen erweiterung erstellen und in der Popup-Liste anzeigen
(SUCHERW)
;;Damit etwas gewählt wird den 1. Eintrag vorbestimmen.
(setq SUCH_DATEI "*")
(setq FMUSTER (strcat SUCH_DATEI "." (nth 0 ERW_LIST)))
(setq STARTWERT "1")
(set_tile "STARTWERT" "1")
(setq PRAEFIX "DSC")
(set_tile "SUCH_DATEI" SUCH_DATEI)
(set_tile "PRAEFIX" PRAEFIX)
(EARX:LISTDRVS EARX_CURDRV)
(EARX:LISTDIRS EARX_CURDIR)
(EARX:LISTFILS EARX_CURDIR)
(EARX:MPREV EARX_CURDIR)
(set_tile "TITEL" TITEL)
(set_tile "MOTTO" MOTTO)
(mode_tile "ADD" 1)
(mode_tile "accept" 1);accept
(mode_tile "C_A" 1)
(mode_tile "REM" 1)
(mode_tile "ALL_REM" 1)
(set_tile "log" LOG_VAL)
(set_tile "min" MIN_VAL)
(if ERWEITERUNG (set_tile "ERWEITERUNG" ERWEITERUNG)(set_tile "ERWEITERUNG" ""))
(set_tile "NACH_DATUM" "1")
(action_tile "SUCH_DATEI" "(SET_FMUSTER $value)")
 
(action_tile "SUCH_ERWEITERUNG" "(setq FMUSTER  (strcat SUCH_DATEI \".\" (nth (atoi $value) ERW_LIST)))")
(action_tile "DRV"    "(EARX RVCHK $VALUE)")
(action_tile "DIR"    "(EARX IRCHK $VALUE)")
(action_tile "FIL"    "(EARX:FILCHK $VALUE)")

(action_tile "ADD"    "(EARX:ADD)")
(action_tile "S_A"    "(EARX:ALLSEL)")
(action_tile "C_A"    "(EARX:UNSEL)")

(action_tile "LIS"    "(EARX:LISTCHK $VALUE)")
(action_tile "REM"    "(EARX:REM)")
(action_tile "ALL_REM"    "(EARX:ALLSEL_LIS)")
(action_tile "log"    "(setq LOG_VAL $value)")
(action_tile "min"    "(setq MIN_VAL $value)")
; (action_tile "NACH_DATUM"); wird hier nicht bearbeitet
(action_tile "PRAEFIX" "(setq PRAEFIX $value)")
(action_tile "ERWEITERUNG" "(setq ERWEITERUNG $value)")
(action_tile "STARTWERT" "(CHECK_STARTWERT $value)") ;(setq STARTWERT $value)
;; (action_tile "UMBENNEN"  "(EARX:CHKOPT)(setq OPTION \"L\")")
(action_tile "accept"  "(EARX:CHKOPT)(setq OPTION \"L\")(done_dialog 1)")
(action_tile "cancel" "(setq EARX_SLL '() FILE_LIST '()) (done_dialog 0)")
; Hilfe bestimmen
(action_tile "HILFE" "(acad_helpdlg \"NIGGDATA.chm\" \"Umbennen\")")
(start_dialog)
(unload_dialog EARX_DAT)
FILE_LIST;Rückgabewert
) ;_ Ende von defun FILE-DIALOG

Und die DCL sieht so aus:
//dcl_settings : default_dcl_settings { audit_level = 3; }

FSEL
: dialog {
  key = TITEL;
  : column {
    : text {
      key = MOTTO;
      width = 80;
      alignment = left;
    }
    : row {
      : text {
        label = "Aktuelles Verzeichnis: ";
      }
      : text {
        key = CUR;
      }
    }
  }
  : row {
    : boxed_column {
          : edit_box {
            label = "Dateiname:";
            key  = "SUCH_DATEI";
            width = 15;
          } 
          : popup_list {
            label = "Zu suchende Dateierweiterung:";
            key = "SUCH_ERWEITERUNG";
            width = 3;
//            fixed_width = true;
//            height = 6;
          }
   
      : popup_list {
        label = "Laufwerk:";
        key  = "DRV";
        width = 30;
        fixed_width = true;
      }
      spacer ;
      : column {
        : column {
          : list_box {
            label = "Verzeichnisse";
            key = "DIR";
            width = 30;
            fixed_width = true;
            height = 6;
          }
          : text {
            key = DIRTXT;
          }
        }
        : column {
          : list_box {
            label = "Dateien";
            key = "FIL";
            width = 30;
            fixed_width = true;
            height = 8;
            multiple_select = true;
          }
          : text {
            key = FILTXT;
          }
        }
      }
      : column {
        : button {
          label = "Alle auswählen";
          key = "S_A";
          fixed_width = true;
          width = 30;
          alignment = centered;
          mnemonic ="w";
        }
        : button {
          label = "Alle abwählen";
          key = "C_A";
          fixed_width = true;
          width = 30;
          alignment = centered;
          mnemonic ="b";
        }
      }
    }
    : boxed_column {
      spacer;
      : ok_button {
        label = "<<Entfernen";
        key = "REM";
        width = 10;
        fixed_width = true;
        alignment = centered;
        mnemonic ="E";
      }
      : ok_button {
        label = "<<Alle Entfernen";
        key = "ALL_REM";
        width = 10;
        fixed_width = true;
        alignment = centered;
        mnemonic ="A";
      }
      : button {
        label = "Übernehmen>>";
        key = "ADD";
        width = 10;
        fixed_width = true;
        alignment = centered;
        mnemonic ="n";
      }
      spacer_1;
    }
    : column {
      : boxed_column {
        : column {
          : list_box {
            label = "Arbeitsliste";
            key  = "LIS";
            width = 60;
            fixed_width = true;
            height = 19;
            multiple_select = true;
          }
          : text {
            key = "SELTXT";
          }
        }
      }
      :row {
        : toggle {
          label = "Nach Datum sortieren";
          key  = "NACH_DATUM" ;
        }
      }
      :row {
        : edit_box {
            label = "Präfix:";
            key  = "PRAEFIX";
            width = 20;
            fixed_width = true;
        }
        : edit_box {
            label = "Startwert:";
            key  = "STARTWERT";
            width = 20;
            fixed_width = true;
        }
        : edit_box {
            label = "Dateiendung:";
            key  = "ERWEITERUNG";
            width = 3;
            fixed_width = true;
        }
      }
      : row {
//        : button {
//          label = "Umbennen";
//          key = "UMBENNEN";
//          fixed_width = true;
//          width = 10;
//          alignment = centered;
//          mnemonic ="U";
//        }
        : button {
          label = "OK";
          key = "accept";
          fixed_width = true;
          width = 20;
          alignment = centered;
          mnemonic ="O";
        }
        : cancel_button {
          label = "Abbruch";
          key = "cancel";
          fixed_width = true;
          width = 20;
          alignment = centered;
          mnemonic ="A";
          is_cancel = true;
        }
        : cancel_button {
          label = "Hilfe";
          key = "HILFE";
          fixed_width = true;
          width = 20;
          alignment = centered;
          mnemonic ="H";
          is_cancel = true;
        }
      }
  : errtile { }
    }
  }
 
}

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Danillo
Mitglied
Bauingenieur


Sehen Sie sich das Profil von Danillo an!   Senden Sie eine Private Message an Danillo  Schreiben Sie einen Gästebucheintrag für Danillo

Beiträge: 229
Registriert: 12.11.2003

Windows 10 - AutoCAD 2023

erstellt am: 07. Jun. 2022 22:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Leute,
danke für die guten Tipps, aber das ist mir doch etwas zu komplex. Bin eher ein spartanischer LISPler...

Ich werde den Tipp mit GetFiled beherzigen und dem User eventuell in einer Schleife die Wahl von mehreren Files erlauben.

Viele Grüße
Daniel

------------------
Windows 10 - AutoCAD 2017

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz