FastFiber

Maplocatie aanmaken in script. [OPGELOST]

Gestart door januz, wo 17 09 2014, 16:51:08

Vorige topic - Volgende topic

januz

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.

roy_043

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)))

januz

#2
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.

roy_043

Je geeft te weinig info, maar het lijkt of je vergeet strcat te gebruiken.

januz


(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.

januz

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.

roy_043

Volgens mij begrijp jij niet wat de functie strcat doet. Ik raad je aan om de documentatie te raadplegen.

januz

Ik ga me binnenkort zeker verdiepen in de documentatie. Nogmaals bedankt.
Groet Erik.

FastFiber