Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

j'aimerai régler un problème de développement,

Imaginons que je dois extraire une liste de fichiers ("string" "string" ...)

et qu'ensuite je dois faire un test sur chaque élément de la liste,

 

 (setq &liste (list "1" "2" "3"))
(foreach $tmp &liste
(print $tmp)
)

 

Jusque là facile !

 

Maintenant la liste &liste est issue d'une fonction

 

(setq &liste (getfile "*.plt" "C:/"))

 

Maintenant je souhaite faire la même chose sans passer par la variable &liste !!! :casstet:

 

(foreach $tmp (getfile "*.plt" "C:/")
(print $tmp)
)

 

Et maintenant losrque mon résultat de mon getfile est nil ça plante !!!

 

Je peut faire un (if (getfile ...) (foreach $tmp (getfile ...

Mais ça ne me plait pas !

 

Donc ma demande est :

comment fait-on pour executer un test sur le résultat d'une fonction dans rappeler 2 fois la fonction et sans passer par une variable intermédiaire ???

 

:casstet:

 

Ps: milles excuses pour la longueur ...

Posté(e)

Si tu ne veux pas passer par une variable : (setq &liste (getfile "*.plt" "C:/")), tu peux utiliser une fonction lambda :

 

((lambda (lst)
  (if lst
    (foreach $tmp lst
      (print $tmp)
    )
  )
)
 (getfile "*.plt" "C:/")
) 

 

PS : Je ne comprends pas bien ton soucis, si la liste est vide (nil) foreach retourne nil :casstet:

 

[Edité le 4/5/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Ou en gardant le même esprit, utiliser la fonction vl-directory-files

(foreach $tmp (vl-directory-files "c:/" "*.plt") (print $tmp))

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

C'était un exemple !

Oui le froeach répond nil , je change d'exemple .... :P

 

fonction @toto qui retourne une liste au format (number "string1" "string2")

 

j'ai besoin de tester le nth 0 pour faire un cond

 

donc si je ne souhaite pas passer par une variable intermédiaire

 

 (@toto "fichier)
; Je ne suis pas sur de mon résultat retourne nil si erreur
(if (@toto "fichier)
(if (= (nth 0  (@toto "fichier)) 0)(progn
....
.......
....)
(progn
(alert "Pas possible")
....
)
)
(alert "Plantage")
)

 

Sinon effectivement,

 

 (@toto "fichier)
; Je ne suis pas sur de mon résultat retourne nil si erreur
(if (setq tmp (@toto "fichier))
(if (= (nth 0  tmp) 0)(progn
....
.......
....)
(progn
(alert "Pas possible")
....
)
)
(alert "Plantage")
)

 

??? :casstet:

 

Il n'y a pas urgence ! c'est juste pour ma connaissance personnelle ;)

 

Merci et a+

Posté(e)

Ce que je disais pour les fonctions lambda reste valable, c'est un moyen pour éviter de définir des variables.

 

((lambda (tmp)
  (if tmp
    (if (= (nth 0 tmp) 0)
      (progn
 . . . . . . . . . . . . . . .)
      (progn
 (alert "Pas possible")
 .
 .
 .
 .
      )
    )
    (alert "Plantage")
  )
)
 (@toto "fichier")
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité