Newsgroup: it.comp.software.cad
Titolo: Funzione While...

Scusate ma mi sto sbattendo per fare una cosa....
Il problema è questo: ho un ciclo di funzioni condizionato da while e cioè
-------------------------------------------------------------------------------
(setq pippo (entsel "\n Seleziona qualcosa:  "))
(while pippo
          (esegue listato)
          (setq pippo (entsel "\nSeleziona qualcos'altro o [ENTER per 
uscire]: "))
)
--------------------------------------------------------------------------------
Il problema è questo; ovviamente il ciclo viene terminato quando il valore 
di pippo è uguale a "nil" giusto?
Premetto che la selezione che devo fare è un testo, vorrei che se seleziono 
male e cioè qualcosa di diverso dall'entità testo o che nel caso che la 
selezione sia proprio "nil" (ho selezionato a vuoto) mi venga richiesto di 
riselezionare.
Qualcuno può darmi degli spunti su come risolvere?
Grazie
Buon lavoro
Andrea 

(defun C:AndreaBag ( / EntDat)
  (while
    (setq EntDat
      (ALE_EntSelFilter "Seleziona un Testo o Mtesto" '((0 . "*TEXT")))
    )
    (princ "Entità selezionata: ")
    (princ (cdr (assoc 0 (entget EntDat))))
  )
  (princ)
)
Comando: ANDREABAG
_
Seleziona un Testo o Mtesto:
Selezionare oggetti:
Nessun oggetto selezionato o valido, riprova!
Seleziona un Testo o Mtesto:
Selezionare oggetti:
Entità selezionata: TEXT
_
Seleziona un Testo o Mtesto:
Selezionare oggetti:
Entità selezionata: MTEXT
_
Seleziona un Testo o Mtesto:
Selezionare oggetti:
Comando annullato.
Comando:
; Copyright ©2005 - Marc'Antonio Alessi, Italy - All rights reserved
; 
http://xoomer.virgilio.it/alessi
;
; Function: ALE_EntSelFilter
;
; Version 1.00 - 22/02/2005
;
; Description:
;   Ssget for one entity with filter list
;
; Arguments:
;   PrmStr = User prompt [STR]
;   FltLst = ssget filter list [LIST]
;
; Example:
;  (ALE_EntSelFilter "Select attibuted block" '((0 . "INSERT") (66 . 1)))
;
; Return Values:
;   [ENAME] Entity name
;   nil if user press 'Return' or 'Space'
;
(defun ALE_EntSelFilter (PrmStr FltLst / FlgSlt EntNam)
    (princ "\n_ ")
    (prompt (setq PrmStr (strcat "\n" PrmStr ": ")))
    (if
      (while (not FlgSlt)
        (if (setq EntNam (ssget "_:E:S" FltLst))
          (not (setq FlgSlt T))
          (if (= 52 (getvar "ERRNO"))
            (setq FlgSlt T)
            (prompt
              (strcat "\nNessun oggetto selezionato o valido, riprova!" 
PrmStr)
            )
          )
        )
      )
      (not (princ "\nComando annullato.  "))
      (ssname EntNam 0)
    )
)
--
----------------------------------------------------------
Marc'Antonio Alessi - 
http://xoomer.virgilio.it/alessi
Per AutoCAD:
- Elaborazione dati from/to Excel
- Librerie manufatti in assonometria
- Travi 2D: disegno automatico travi in C.A.
- Autolayers: gestione automatica dei layers
- Elaborazioni e stampe multiple e automatiche
- Parametrico 2D, Viterie 2D/3D, Esplosi 2D/3D
- AutoGroups: gestione automatica gruppi di layers
- SetUp del disegno con gestione automatica DimStyles
- Conversione automatica files Inventor a DWG e viceversa
  anche senza avere Inventor installato
- ...
----------------------------------------------------------

 ha scritto nel messaggio 
news:439fa30f$0$16205$4faf...@reader3.news.tin.it...


 ha scritto nel messaggio....
Grazie ancora Marco per le righe di codice che mi ha postato.
Sono riuscito a risolvere il problema che avevo;
adesso ne ho altri due di problemi:
1)
con le funzioni
(getvar "dwgprefix")
e
(getvar "dwgname")
e con "strcat"
riesco a creare un percorso del tipo
C:\\miacartella\\miolavoro\\pippo.csv
file da far aprire a Excel.
Il problema sta nel fatto che purtroppo quando invio ad excel il file con 
"startapp" non mi riconosce il percorso (se è complesso) con i doppi apici 
mentre me lo apre se lo faccio salvare direttamente sulla radice del disco.
2)
per far partire excel con il comando "startapp" devo fornire il percorso 
completo dell'eseguibile di excel, siccome vorrei usarlo su più macchine che 
hanno diverse vrs di excel come faccio a farglielo trovare in automatico.
ho provato con "findfile" ma se ho capito bene cerca solo nelle cartelle di 
ricerca di Autocad, giusto?
Grazie ancora a chi mi vorrà aiutare.
un saluto Andrea 

; Marc'Antonio Alessi, Italy - 
http://xoomer.virgilio.it/alessi
;
; Function: MsW_StartAppWithFile
;
; Example:
;  (MsW_StartAppWithFile
;    "excel.exe"
;    "c:\\temp\\files prove\\MyXls File.xls"
;  )
;
(defun MsW_StartAppWithFile (AppNam FilNam / AppPat FilPat)
  (cond
    ( (and
        (setq FilPat (findfile FilNam))
        (setq AppPat (MsW_GetAppPath AppNam))
       )
       (startapp (strcat AppPat AppNam) (strcat "\"" FilPat "\""))
    )
    ( (null FilPat)
      (alert (strcat "File \" " FilNam "\" non trovato."))
    )
    ( (null AppPat)
      (alert (strcat AppNam " non è una applicazione Microsoft Windows 
registrata."))
    )
  )
)
;
; Get Microsoft Windows applications path
; Example: (MsW_GetAppPath "Excel.exe")
;
(defun MsW_GetAppPath (AppNam)
  (vl-registry-read
    (strcat
      "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App 
Paths\\"
      AppNam
    )
    "Path"
  )
)
;
; Get Microsoft Excel path
;
(defun MsX_GetPath ( ) (MsW_GetAppPath "Excel.exe"))


; Marc'Antonio Alessi, Italy - 
http://xoomer.virgilio.it/alessi
Ti ringrazio ancora per l'ulteriore aiuto.
Mi dispiace che devi darmi direttamente linee di codice, a me va bene anche 
me mi chiarisci i dubbi.
Grazie ancora di tutto
Un saluto andrea