Hallo allemaal,
via autolisp gebruiken wij een programma om tekst uit te lezen en in een bestand te zetten. AutoCAD saved echter automatisch in "mijn documenten" het bestand. Weet er iemand hoe we deze plaats van saven zelf kunnen kiezen?
mvg
Steve
Dat zal wel ergens in de lisp staan.
Ofwel maak je een tussenstap dat je elke keer kan kiezen waar er moet opgeslaan worden, ofwel pas je de regel in de lisp aan zodat er altijd op bv f:\auto\ wordt opgeslagen.
plaats de code van de lisp hier even.
Zodat iedereen zelf kan zien waar het over gaat.
hallo,
bij deze de code die we op een gratis site gevonden hebben. Voor ons is dit een zeer handig programmaatje, er is echter 1 probleem: de tekst die het programma inleest wordt automatisch weggeschreven naar een willekeurige locatie. Kan iemand ons zeggen waar of welke code we moeten toevoegen zodat het programma deze file wegschrijft op de door ons vastgelegde locatie?
groetjes
Steve
define program name and localize variables
(defun C:TXTOUT (/ FN2 FD2 KWD2 SS2 CTR2 SSQTY2 OBJD2 OBTXT2)
(setq FN2 (getstring "\nText export file name: ")) ;get file name
(if (setq FD2 (open FN2 "r")) ;if file can be found
(progn
(close FD2) ;close file
(initget "Overwrite Append Cancel") ;initialize allowable keywords
(setq KWD2 (getkword "\nFile exists! Overwrite, Append or Cancel <O/a/c>: "))
)
)
(if (= "Cancel" KWD2) ;if user response was Cancel
(prompt "\nOperation cancelled at user's request.") ;prompt to confirm
(progn
(if (= "Append" KWD2) ;if user response was Append
(progn
(setq FD2 (open FN2 "a")) ;open file for appending
(prompt (strcat "\nFile \"" FN2 "\" now ready for appending."));and confirm
)
(progn
(setq FD2 (open FN2 "w")) ;else open file for (over)writing
(prompt (strcat "\nFile \"" FN2 "\" now open.")) ;and confirm
)
)
(prompt "\nPick text objects to export: ") ;prompt to select text
;select only TEXT & MTEXT
(setq SS2 (ssget '((-4 . "<OR")(0 . "TEXT")(0 . "MTEXT")(-4 . "OR>")))
CTR2 0 ;initialize counter CTR2 to zero
SSQTY2 (sslength SS2) ;find size of selection set
)
(repeat SSQTY2 ;repeat for each object
(setq OBJD2 (entget (ssname SS2 CTR2)) ;extract object data
OBTXT2 (cdr (assoc 1 OBJD2)) ;extract string value
CTR2 (1+ CTR2) ;increment counter
)
(write-line OBTXT2 FD2) ;write string to file
) ;end REPEAT
(close FD2) ;close file
(if (= "Append" KWD2) ;\inform user
(prompt (strcat "\n" (itoa SSQTY2) " lines appended to file.")); >of number
(prompt (strcat "\n" (itoa SSQTY2) " lines written to file.")) ;/ of lines
)
) ;end PROGN
) ;close "(if (= "Append"..."
(princ) ;exit quietly
)
Na de tweede programmaregel de volgende regel invoegen:
(setq FN2 (strcat "c:\\Temp\\" FN2))
Als het goed is wordt het bestand nu opgeslagen in de temp directory op de C-schijf.
Je kunt natuurlijk elke gewenste directorie hier plaatsen.
hallo
dat werkt niet helemaal vrees ik. hij saved het nog altijd niet naar de plaats waar wij hebben opgegeven? mss zetten we de regel op de verkeerde plaats?
groetjes
steve
Hierbij de Goede code.
De regels tussen de vele sterretjes zijn toegevoegd.
Ik heb tevens een extensie voor het bestand toegevoegd.
Het programmaatje werkt onder Acad 2005.
;;;define program name and localize variables
(defun C:TXTOUT (/ FN2 FD2 KWD2 SS2 CTR2 SSQTY2 OBJD2 OBTXT2)
(setq FN2 (getstring "\nText export file name: "))
;;get file name
;;;*******************************************;
(setq FN2 (strcat "c:\\temp\\" FN2 ".txt"))
;;append directory and extension to file name
;;;*******************************************;
(if (setq FD2 (open FN2 "r"))
;;if file can be found
(progn
(close FD2)
;;close file
(initget "Overwrite Append Cancel")
;;initialize allowable keywords
(setq KWD2 (getkword "\nFile exists! Overwrite, Append or Cancel <O/a/c>: "))
) ;_ end of progn
) ;_ end of if
(if (= "Cancel" KWD2)
;;if user response was Cancel
(prompt "\nOperation cancelled at user's request.")
;;prompt to confirm
(progn
(if (= "Append" KWD2)
;;if user response was Append
(progn
(setq FD2 (open FN2 "a"))
;;open file for appending
(prompt (strcat "\nFile \"" FN2 "\" now ready for appending."))
;;and confirm
) ;_ end of progn
(progn
(setq FD2 (open FN2 "w"))
;;else open file for (over)writing
(prompt (strcat "\nFile \"" FN2 "\" now open."))
;;and confirm
) ;_ end of progn
) ;_ end of if
(prompt "\nPick text objects to export: ")
;;prompt to select text
;;select only TEXT & MTEXT
(setq SS2 (ssget '((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>")))
CTR2 0
;;initialize counter CTR2 to zero
SSQTY2 (sslength SS2)
;;find size of selection set
) ;_ end of setq
(repeat SSQTY2
;;repeat for each object
(setq OBJD2 (entget (ssname SS2 CTR2))
;;extract object data
OBTXT2 (cdr (assoc 1 OBJD2))
;;extract string value
CTR2 (1+ CTR2)
;;increment counter
) ;_ end of setq
(write-line OBTXT2 FD2)
;;write string to file
) ;_ end of repeat
;;end REPEAT
(close FD2)
;;close file
(if (= "Append" KWD2)
;;\inform user
(prompt (strcat "\n" (itoa SSQTY2) " lines appended to file."))
;; >of number
(prompt (strcat "\n" (itoa SSQTY2) " lines written to file."))
;;/ of lines
) ;_ end of if
) ;_ end of progn
;;end PROGN
) ;_ end of if
;;close "(if (= "Append"..."
(princ)
;;exit quietly
) ;_ end of defun
;|«Visual LISP© Format Options»
(100 2 40 2 T "end of " 80 9 0 0 nil T T nil T)
;*** DO NOT add text below the comment! ***|;
Hey Joop,
Wij gebruiken ook autoCAD 2005 maar het werkt nog steeds niet :( zelfs al kopieren we jouw hele code, hij blijft altijd wegschrijven in mijn documenten.
Groetjes Steve
(defun C:TXTOUT (/ FN2 FD2 KWD2 SS2 CTR2 SSQTY2 OBJD2 OBTXT2)
(setq FN2 (getstring "\nText export file name: ")) ;get file name
(setq FN2 (strcat "c:\\Temp\\" FN2 ".txt"))
(if (setq FD2 (open FN2 "r")) ;if file can be found
zie de rode tekst
op deze manier wordt er een txt bestaand in c:\temp aangemaakt.
ps het bestaand werd niet willekeurig geplaast maar gewoon in de map waar de tekening staat die je aan het bewerken bent.
juist Bart.. de FN en FD verwarren het hoofd van joop een beetje denk ik...