FastFiber

.txt file wegschrijven naar een specifieke lokatie

Gestart door marcelmaas, do 20 01 2011, 11:44:52

Vorige topic - Volgende topic

marcelmaas

Hi allemaal,

We hebben een dialoogbox waarin we boven in een project nummer op moeten geven.
Nou willen we de gegevens uit de dialoogbox wegschrijven als .txt file naar de map met dat project nummer.!

We hebben een map "projecten" en daarin zitten de jaartallen 2009, 2010, 2011 enz., daarin zitten dan uiteraard weer de verschillende project nummers, en daarin zitten dan weer mappen in mappen waarin uiteindelijk een map die "Activering" heet.
Daarin zou het .txt bestand opgeslagen moeten worden.

Dus eigenlijk zou er op een bepaalde manier gezocht moeten worden naar het projectnummer en dan daar de onderliggende mappen moeten doorlopen tot uiteindelijk de file in de map "Activering" terecht kan komen.

Edit: Achter het project nummer staat meestal nog de naam van het project, dus er moet alleen gezocht worden op de eerste 6 cijfers van die naam!

Heeft iemand een idee hoe dit voor elkaar te kunnen krijgen.?

Met vriendelijke groet,

Marcel

marcelmaas

Hi mrbolshoi,

De gegevens die worden weggeschreven in dit bestand worden later weer door andere routines gebruikt.

Het probleem is dat we met een heel uitgebreid lisp programma werken wat al jaren geleden is gemaakt.
Daarin willen we nu wat dingen gaan veranderen/verbeteren, en een daarvan is dat de .txt file niet meer lokaal opgeslagen wordt bij de persoon die op dat moment de dialoogbox invult, maar centraal op onze M: schijf.

Het mapje "Activering" staat inderdaad altijd op dezelfde plaats bijvoorbeeld zo:
M:\Projecten\2010\100060 pietje puk project\Tekeningen\Activering


H@rm

@Marcel,

ik ga er vanuit dat het txt-bestand 1 map dieper komt te staan als de tekening waar de gegevens uit komen.
Je kunt dan dwgprefix opvragen.
je kunt dan de tekst Activering er aan toevoegen en je bestandsnaam.
tot slot maak je van deze variabele je pad.

(strcat (getvar "dwgprefix") "Activering\\bestand.txt")

Zo iets.

Ik heb het niet getest, maar iets in deze geest.

Michel
Acad 10 t/m 2015
Revit 2010 t/m 2015
autodidact lisp

marcelmaas

#3
Harm,

Het .txt bestand maken we aan vanuit een dialoogbox, dus hangt voor ons niet aan een tekening.
Het is de bedoeling dat het .txt bestand opgeslagen wordt in de mapje "Activering" en die zit enkele lagen diep in de map van ieder project nummer.

Dus er moet eerst gezocht worden in de map M:\Projecten naar het project nummer dat in de dialoogbox is ingevuld.

Het project nummer bestaat gewoon uit 6 cijfers, dus moet er gewoon op de eerste 6 cijfers of linkse 6 karakters gekeken worden.

Dus met dat prefix gaat het niet werken denk ik.

Marcel..

HofCAD

#4
Citaat van: marcelmaas op do 20 01 2011, 14:06:23

Het mapje "Activering" staat inderdaad altijd op dezelfde plaats bijvoorbeeld zo:
M:\Projecten\2010\100060 pietje puk project\Tekeningen\Activering

Beste Marcel,

Bedoel je het onderstaande:
(findfile "M:\\Projecten\\2010\\100060~1\\Tekeningen\\Activering")

En om  het bestand mijntekst.txt te vinden:
(findfile "M:\\Projecten\\2010\\100060~1\\Tekeningen\\Activering\\mijntekst.txt")

Met vriendelijke groet, HofCAD CSI.

(defun c:zoekmap()
(setq jaar "2010" projectnummer "100060")
(setq map (strcat "M:\\Projecten\\" jaar "\\" projectnummer "~1\\Tekeningen\\Activering"))
(setq map (findfile map))
(if map (princ (strcat "\nDe map " map " is gevonden."))
(princ "\nDe map is niet gevonden."))
(textscr)
(princ)
)


(defun c:zoekmap2()
(setq jaar "2010" projectnummer "100060")
(setq map (strcat "M:\\Projecten\\" jaar "\\" projectnummer "~1\\Tekeningen"))
(setq submaplst (vl-directory-files map))
(if (= (type (member '"Activering" submaplst)) 'LIST)
(progn (setq map (strcat map "\\Activering"))
(princ (strcat "\nDe map " map " is gevonden.")))
(princ "\nDe map is niet gevonden."))
(textscr)
(princ)
)
ACADcadabra

marcelmaas

Hi Hofcad,

Ik probeer de code's te begrijpen maar dat lukt me niet helemaal.

Is het zo dat je eerst het jaar 2010 opgeeft? (we weten namelijk niet of het .txt bestand in die onderliggen mappen zit)
Daarna het project nummer, wat dan waarschijnlijk op een of andere manier uit de dialoogbox opgevragen wordt?

Zou je de regels en wat er gedaan wordt een beetje kunnen toelichten?


Met vriendelijke groet, Marcel..

HofCAD

#6
Citaat van: marcelmaas op vr 21 01 2011, 11:21:54
Hi Hofcad,

Ik probeer de code's te begrijpen maar dat lukt me niet helemaal.

Is het zo dat je eerst het jaar 2010 opgeeft? (we weten namelijk niet of het .txt bestand in die onderliggen mappen zit)
Daarna het project nummer, wat dan waarschijnlijk op een of andere manier uit de dialoogbox opgevragen wordt?

Zou je de regels en wat er gedaan wordt een beetje kunnen toelichten?


Met vriendelijke groet, Marcel..
Beste Marcel,

Wordt bij jouw de map 'Activering' niet gevonden? :mrgreen: :oops: :mrgreen: :oops: :twisted: :roll:
Ik controleer met de programma's zoekmap en zoekmap2 of de directory
M:\Projecten\2010\100060 pietje puk project\Tekeningen\Activering bestaat.
De shortname voor '100060 pietje puk project' is '100060~1'.
Als je in de programma's de regel (setq jaar "2010" projectnummer "100060")
verandert met een bestaand jaar en een bestaand projectnummer
moeten de programma's in de variabele map het pad zetten naar de bijbehorende map 'Activering'.

Met vriendelijke groet, HofCAD CSI.

(defun c:zoekDir()
(setq jaar (getstring "\Van welk jaar is het project[2010]"))
(if (= jaar "") (setq jaar "2010"))
(setq projectnummer (getstring "\nWat is projectnummer met omschrijving[100060 pietje puk project]"))
(if (= projectnummer "") (setq projectnummer "100060 pietje puk project"))
;;;(substr projectnummer 1 6) geeft de eerste 6 karakters
;;;(strcat (substr projectnummer 1 6) "~1") geeft de Shortname
(setq map (strcat "M:\\Projecten\\" jaar "\\" (substr projectnummer 1 6) "~1\\Tekeningen\\Activering"))
(setq map (findfile map))
(if map (princ (strcat "\nDe map " map " is gevonden."))
(princ "\nDe map is niet gevonden."))
(textscr)
(princ)
)
ACADcadabra

marcelmaas

Okay als ik een bestaand jaar en projectnummer in de lisp zet dan vind hij hem.
Tot zover gaat het goed en snap ik het ook nog.

Maar hoe word dan het projectnummer uit onze dialoogbox opgehaald?
En waar haalt hij dan het jaartal vandaan?


groeten Marcel..

HofCAD

Citaat van: marcelmaas op vr 21 01 2011, 12:21:39
Okay als ik een bestaand jaar en projectnummer in de lisp zet dan vind hij hem.
Tot zover gaat het goed en snap ik het ook nog.

Maar hoe word dan het projectnummer uit onze dialoogbox opgehaald?
En waar haalt hij dan het jaartal vandaan?


groeten Marcel..
Beste Marcel,

Als het goed is, moet je in die dialoogbox ergens een invoerveld hebben voor het jaartal
en een invoerveld voor het projectnummer?
In de lisp waarin de dialoogbox geopend wordt worden de waarden in deze velden
toegekend aan variabelen.
Als er geen invoerveld is voor het jaartal dan moet via findfile alle jaartallen in de
map M:\Projecten\ aflopen of daar een een map is met het projectnummer.

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

marcelmaas

Hofcad,

We hebben in de dialoogbox geen vraag voor jaartal, wel projectnummer!

Dit is wat we momenteel hebben:

//---------------------------------------------------------------------------
//     Dialoogbox voor opvragen ordernummer
//---------------------------------------------------------------------------
Order : dialog   {
   label = "Ingave ordernummer";
   :column {
        label = "";
        :edit_box {
               alignment = left;
               edit_width = 12;
                label = "Ordernummer : ";
                key = "Ordernr";
                  }
         :edit_box {
               alignment = left;
               edit_width = 12;
                label = "Uithangvoorziening j/n : ";
                key = "Uithang";
                  }
         :edit_box {
               alignment = left;
               edit_width = 12;
                label = "Factor verlieswater (bijv. 1.15) : ";
                key = "Verlies";
                  }
         :edit_box {
               alignment = left;
               edit_width = 12;
                label = "Koperdiameter in [mm] (8, 10 of 12mm) : ";
                key = "Koper";
                  }
         :edit_box {
               alignment = left;
               edit_width = 12;
                label = "Wanddikte koper in [mm] : ";
                key = "Dikte_wand";
                  }                 
         :edit_box {
               alignment = left;
               edit_width = 12;
                label = "Materiaal slang (staal/kunststof) s/k : ";
                key = "Slang";
                  }                 
                  }
ok_cancel;
                 }


;============================================================================
;-------Vastleggen onderhande ordernummer------------------------------------
;----------------------------------------------------------------------------
(defun order (/ dia_id einde ordno Bestand Bestandsnaam voorziening orderregel verliesfactor soortslang Koperdiameter Wanddikte)
   (Pakmode)
   (setq dia_id(load_dialog "Activering_nieuw.dcl"))
   (if (not (new_dialog "Order" dia_id))
       (exit)
   )
   (action_tile "cancel" "(setq einde t)")
   (action_tile "Ordernr" "(setq ordno $value)")
   (action_tile "Uithang" "(setq voorziening $value)")
   (action_tile "Verlies" "(setq verliesfactor $value)")
   (action_tile "Koper" "(setq Koperdiameter $value)")
   (action_tile "Dikte_wand" "(setq Wanddikte $value)")
   (action_tile "Slang" "(setq soortslang $value)")
   (mode_tile "Ordernr" 2)
   (start_dialog)
   (done_dialog)
   (unload_dialog dia_id)
   (if (/= einde t)
   (progn
   (a_Tekst "uit")
   (setq Bestandsnaam "C:/$ordernummer.txt")
   (setq Bestand (a_PT_open Bestandsnaam "w"))
   (prin1 ordno Bestand)
   (princ "   " Bestand)
   (prin1 voorziening Bestand)
   (princ "   " Bestand)
   (princ verliesfactor Bestand)
   (princ "   " Bestand)
   (princ Koperdiameter Bestand)
   (princ "   " Bestand)
   (princ Wanddikte Bestand)
   (princ "   " Bestand)   
   (prin1 soortslang Bestand)
   (close Bestand)
   (Zetmode))
   (a_Tekst "aan"))
   )



Hoe zou ik dat in deze codes moeten verpakken?


Groeten Marcel..

bart

marcel zit het jaartal soms in het projectnumer ?
bijvoorbeeld 201145

zo niet dan moet je en regel opstellen dat bijvoorbeel project 120345 t/m 120390 in 2009 zijn gemaakt en
123091 t/m 124700 in 2010 en alles van daaraf in 2011
waarbij de regel uiteraadt elk jaar moet worden uitgebreidt.

Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

marcelmaas

Hi Bart,

De eerste 2 nummers van het projectnummer staan voor het jaartal, dus 102222 is uit 2010 en 092222 uit 2009.

Kun je daar iets mee?

groeten Marcel..

HofCAD

#12
Citaat van: marcelmaas op vr 21 01 2011, 14:01:07
Hi Bart,

De eerste 2 nummers van het projectnummer staan voor het jaartal, dus 102222 is uit 2010 en 092222 uit 2009.

Kun je daar iets mee?

groeten Marcel..
Beste Marcel,

Is het Ordernummer het projectnummer?
Als dat zo is, dan staat de waarde in de lokale variabele ordno.

Met vriendelijke groet, HofCAD CSI.

PS Probeer het onderstaande eens, ik kan het niet uittesten want ik mis een aantal subs.

;============================================================================
;-------Vastleggen onderhande ordernummer------------------------------------
;----------------------------------------------------------------------------
(defun order (/ dia_id einde ordno Bestand Bestandsnaam voorziening orderregel verliesfactor soortslang Koperdiameter Wanddikte)
  (Pakmode)
  (setq dia_id(load_dialog "Activering_nieuw.dcl"))
  (if (not (new_dialog "Order" dia_id))
      (exit)
  )
  (action_tile "cancel" "(setq einde t)")
  (action_tile "Ordernr" "(setq ordno $value)")
  (action_tile "Uithang" "(setq voorziening $value)")
  (action_tile "Verlies" "(setq verliesfactor $value)")
  (action_tile "Koper" "(setq Koperdiameter $value)")
  (action_tile "Dikte_wand" "(setq Wanddikte $value)")
  (action_tile "Slang" "(setq soortslang $value)")
  (mode_tile "Ordernr" 2)
  (start_dialog)
  (done_dialog)
  (unload_dialog dia_id)
  (if (/= einde t)
  (progn
  (a_Tekst "uit")
  (setq Sjaar 2000 Ejaar 2011 Notoke T jaar Sjaar)
  (while NotOke
  (setq map (findfile (strcat "M:\\Projecten\\" (itoa jaar)
  "\\" ordno "~1\\Tekeningen\\Activering")))
  (if map (setq NotOke nil))
  (setq jaar (1+ jaar))
  (if (> jaar Ejaar) (ai_abort "Geen Map" "De projectmap moet nog aangemaakt worden."))
  )
  (setq Bestandsnaam (strcat map "\\$ordernummer.txt"))
  (setq Bestand (a_PT_open Bestandsnaam "w"))
  (prin1 ordno Bestand)
  (princ "   " Bestand)
  (prin1 voorziening Bestand)
  (princ "   " Bestand)
  (princ verliesfactor Bestand)
  (princ "   " Bestand)
  (princ Koperdiameter Bestand)
  (princ "   " Bestand)
  (princ Wanddikte Bestand)
  (princ "   " Bestand)  
  (prin1 soortslang Bestand)
  (close Bestand)
  (Zetmode))
  (a_Tekst "aan"))
  )
ACADcadabra

marcelmaas

Hi Hofcad,

Ik krijg in een popup deze melding "application error" en "De projectmap moet nog aangemaakt worden".

in de autocad text window krijg ik deze melding.

Command:
Command:
Command:  060045
Tekst uit...

wat bij ons normaal zegt dat het txt bestand goed is weggeschreven, maar hij schrijft nu niks weg.
Niet naar de C: schijf en ook niet in de map waar we hem nu heen zouden sturen.

Groeten Marcel..

HofCAD

#14
Beste Marcel,

  (setq map (findfile (strcat "c:\\Projecten\\" (itoa jaar)
  "\\" ordno "~1\\Tekeningen\\Activering")))

moet vervangen worden door:
  (setq map (findfile (strcat "M:\\Projecten\\" (itoa jaar)
  "\\" ordno "~1\\Tekeningen\\Activering")))

Probeer het nog eens.
Is het Ordernummer het projectnummer?


Met vriendelijke groet, HofCAD CSI.

PS Let ook op (setq Sjaar 2000 Ejaar 2011 Notoke T jaar Sjaar)
Sjaar staat voor Startjaar en Ejaar staat voor Eindjaar.
ACADcadabra

FastFiber