CADsite forum

AutoCAD => Autolisp => Topic gestart door: Steve op ma 05 09 2005, 15:30:31

Titel: Saven
Bericht door: Steve op ma 05 09 2005, 15:30:31
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
Titel: Saven
Bericht door: julien op ma 05 09 2005, 15:34:21
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.
Titel: Saven
Bericht door: bart op ma 05 09 2005, 16:18:24
plaats de code van de lisp hier even.
Zodat iedereen zelf kan zien waar het over gaat.
Titel: Saven
Bericht door: Steve op do 08 09 2005, 09:30:28
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
)
Titel: Saven
Bericht door: Joop op do 08 09 2005, 09:52:59
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.
Titel: Saven
Bericht door: Steve op do 08 09 2005, 10:33:26
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
Titel: Saven
Bericht door: Joop op do 08 09 2005, 11:10:54
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! ***|;
Titel: Saven
Bericht door: Steve op do 08 09 2005, 11:28:09
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
Titel: Saven
Bericht door: bart op do 08 09 2005, 11:28:10
(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.
Titel: Saven
Bericht door: WebRacer op do 08 09 2005, 14:07:41
juist Bart.. de FN en FD verwarren het hoofd van joop een beetje denk ik...