FastFiber

Saven

Gestart door Steve, ma 05 09 2005, 15:30:31

Vorige topic - Volgende topic

Steve

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

julien

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.

bart

plaats de code van de lisp hier even.
Zodat iedereen zelf kan zien waar het over gaat.
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

Steve

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
)

Joop

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.
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

Steve

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

Joop

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! ***|;
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

Steve

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

bart

(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.
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

WebRacer

juist Bart.. de FN en FD verwarren het hoofd van joop een beetje denk ik...
?

FastFiber