CADsite forum

AutoCAD => Autolisp => Topic gestart door: januz op wo 17 09 2014, 16:51:08

Titel: Maplocatie aanmaken in script. [OPGELOST]
Bericht door: januz op wo 17 09 2014, 16:51:08
Hallo allen,

Ik ben bezig met het maken van een script waarmee verschillende tekeningen worden geplot. Ik wil  deze bestanden (pdf) graag gestructureerd hebben.
Ik gebruik de regel:

(setq plotdir (strcat "C:\\Bestanden\\Woningen\\Dossier\\Dossier\\Straatnaam\\Huisnummer\\Algemeen\\Tekeningen"))
(if (not (vl-file-directory-p plotdir))
  (progn
    (vl-mkdir plotdir)
    )
  )
waarbij de Straatnaam en het Huisnummer variabelen zijn die ik uit de bestandsnaam haal, zodat een gestructureerd geheel zal ontstaan. Ik krijg het echter niet voor elkaar om de map locatie automatisch aan te maken, ik kan telkens een extra folder toevoegen binnen het script, maar niet 8 niveaus tegelijk. Dus na Tekeningen kan ik wel \\Hoofdstraat toevoegen maar dus maar één voor één. Heeft iemand een idee hoe dit aan te pakken?

Ik hoop dat ik e.e.a. duidelijk hebt uitgelegd.

Groet Erik.
Titel: Re: Maplocatie aanmaken in script.
Bericht door: roy_043 op wo 17 09 2014, 17:26:43
Ik gebruik hiervoor mijn KGA_File_PathParse functie:
;;; (KGA_File_PathParse "C:\\myFiles\\txtFiles\\test.txt" T)
;;; => ("C:\\" "C:\\myFiles\\" "C:\\myFiles\\txtFiles\\" "C:\\myFiles\\txtFiles\\test.txt")
;;; (KGA_File_PathParse "C:\\myFiles\\txtFiles\\test.txt" nil)
;;; => ("C:\\" "myFiles\\" "txtFiles\\" "test.txt")
;;; ======================================================================
(defun KGA_File_PathParse (path fullPathP / delim ret sub)
  (setq delim (vl-string->list "\\/"))
  (setq path (vl-string->list path))
  (repeat (length path)
    (setq sub (cons (car path) sub))
    (if
      (or
        (vl-position (car path) delim)
        (not (cdr path))
      )
      (progn
        (setq ret (cons (vl-list->string (reverse sub)) ret))
        (if (not fullPathP)
          (setq sub nil)
        )
      )
    )
    (setq path (cdr path))
  )
  (reverse ret)
)


In jouw geval kun je iets dergelijks gebruiken:
(mapcar 'vl-mkdir (cdr (KGA_File_PathParse jouwPad T)))
Titel: Re: Maplocatie aanmaken in script.
Bericht door: januz op wo 17 09 2014, 19:32:10
Hallo Roy en bedankt voor je snelle reactie. De mapstructuur wordt nu aangemaakt dus dat gaat alvast prima. Wanneer ik nu echter door gebruik te maken van SplitDwgName die ik ooit al eens van je gehad heb een gedeelte van de bestandsnaam wil gebruiken voor een mapnaam geeft het script een foutmelding. Als ik \\(nth 4 (SplitDwgName))\\ invul geeft hij als mapnaam (nth 4 (SplitDwgName)) en wanneer ik \\"(nth 4 (SplitDwgName))"\\ doe, dus met " ", loopt het script vast. Als ik de textwindow van Autocad dan open geeft hij als melding: too many arguments. De (nth 4 (SplitDwgName)) is de straatnaam dus ik zou graag willen dat de map de straatnaam krijgt.
Gr Erik.
Titel: Re: Maplocatie aanmaken in script.
Bericht door: roy_043 op do 18 09 2014, 10:07:36
Je geeft te weinig info, maar het lijkt of je vergeet strcat te gebruiken.
Titel: Re: Maplocatie aanmaken in script.
Bericht door: januz op do 18 09 2014, 10:28:05

(vl-load-com)
(setq plotdir (strcat "C:\\Bestanden\\Woningen\\Dossier\\Dossier\\Straatnaam\\Huisnummer\\Algemeen\\Tekeningen"))
(defun KGA_File_PathParse (path fullPathP / delim ret sub)
  (setq delim (vl-string->list "\\/"))
  (setq path (vl-string->list path))
  (repeat (length path)
    (setq sub (cons (car path) sub))
    (if
      (or
        (vl-position (car path) delim)
        (not (cdr path))
      )
      (progn
        (setq ret (cons (vl-list->string (reverse sub)) ret))
        (if (not fullPathP)
          (setq sub nil)
        )
      )
    )
    (setq path (cdr path))
  )
  (reverse ret)
)
(mapcar 'vl-mkdir (cdr (KGA_File_PathParse "C:\\Bestanden\\Woningen\\Dossier\\Dossier\\Straatnaam\\Huisnummer\\Algemeen\\Tekeningen" T)))

Is wat ik gebruik. Ik wil dus op de plaats van straatnaam een variabele gebruiken welke door middel van splitdwgname uit de bestandsnaam haal, zodat ik de tekeningen per straatnaam kan structureren.
Hopelijk weet jij de oplossing.
Gr.
Titel: Re: Maplocatie aanmaken in script.
Bericht door: januz op do 18 09 2014, 10:45:11
Hallo, Roy,
Je had gelijk. Ik heb strcat toegevoegd voor
(mapcar 'vl-mkdir (cdr (KGA_File_PathParse "C:\\Bestanden\\Woningen\\Dossier\\Dossier\\Straatnaam\\Huisnummer\\Algemeen\\Tekeningen" T)))
dus nu
(strcat (mapcar 'vl-mkdir (cdr (KGA_File_PathParse "C:\\Bestanden\\Woningen\\Dossier\\Dossier\\Straatnaam\\Huisnummer\\Algemeen\\Tekeningen") T)))
en nu werkt het perfect.
Dank voor je hulp.
Groet Erik.
Titel: Re: Maplocatie aanmaken in script. [OPGELOST]
Bericht door: roy_043 op do 18 09 2014, 13:16:46
Volgens mij begrijp jij niet wat de functie strcat doet. Ik raad je aan om de documentatie te raadplegen.
Titel: Re: Maplocatie aanmaken in script. [OPGELOST]
Bericht door: januz op do 18 09 2014, 13:22:19
Ik ga me binnenkort zeker verdiepen in de documentatie. Nogmaals bedankt.
Groet Erik.