DenisHen Posté(e) le 31 mars 2018 Posté(e) le 31 mars 2018 Bonjour à tous. Voilà, je cherche à utiliser le super lisp de Maître (gile) : "InputBox", que j'utilise déjà dans d'autres codes. J'ai une liste "simple", en faite, c'est la liste des vues enregistrées dans un dessin, et je cherche à les placer dans le "InputBox" qui ne veux qu'une liste de paires pointés. Je suis sûr que ça va se passer avec des lambda et des mapcar, mais je n'arrive même pas à écrire une ligne correcte... En fait, je ne sais absolument pas par où commencer. Je suppose qu'il devrait il y avoir aussi un strcat... Mais je rame comme jamais... Si quelqu'un a une astuce, un conseil ou un début de solution, Je suis preneur... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 31 mars 2018 Posté(e) le 31 mars 2018 Je pense que tu veux plutôt parler de OptionBox ou ListBox.Toutes deux prennent en argument une liste de paires pointées (key . label). si je comprends bien, tu veux utiliser la même valeur comme clé et comme libellé à savoir le nom de la vue. Tu as donc une liste de type : '("A" "B" "C") et il te faut : '(("A" . "A") ("B" . "B") ("C" . "C"))autrement dit :(list (cons "A" "A") (cons "B" "B") (cons "C" "C"))et c'est exactement ce que fait :(mapcar 'cons '("A" "B" "C") '("A" "B" "C")) PS : un exemple est donné dans les commentaires de ListBox avec (layoutlist). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 31 mars 2018 Posté(e) le 31 mars 2018 Pour mémoire :(mapcar 'fun '(a b c))est équivalent à :(list (fun a) (fun B) (fun c))et :(mapcar 'fun '(a b c) '(d e f))à :(list (fun a d) (fun b c) (fun c f))où fun est une fonction qui peut être une fonction LISP prédéfinie, une fonction LISP définie avec (defun ...) ou une fonction lambda qui prend un seul argument dans le premier cas et deux dans le second. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 31 mars 2018 Auteur Posté(e) le 31 mars 2018 Salut (gile), ouiiiii, tu as raison, je voulais parler de ListBox... Au temps pour moi... Je ne savais pas qu'une paire pointé pouvait être "double", comme ("A" . "A"), je pensais qu'il fallait systématiquement ((key1 . label1) (key2 . label2) ...) où key=nombre et label=chaine... Je sais gérer les paires pointés du types (setq LstProject '((1 . "Lambert 1 NORD") (2 . "Lambert 2 Etendu") (3 . "CC48")))Mais je ne sais pas si je vais m'en sortir avec ton type de liste où les clefs et les chaines sont les mêmes... Car ta fonction ListBox retourne un nombre. Peut-être devrais-je utiliser (nth ? Enfin, je vais essayer de faire quelque-chose avec ça... merci encore pour ton aide... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 31 mars 2018 Posté(e) le 31 mars 2018 Mets des lunettes :et il te faut : '(("A" . "A") ("B" . "B") ("C" . "C")) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 31 mars 2018 Auteur Posté(e) le 31 mars 2018 C'est ma faute, j'avais mal lu, c'est pour ça que j'ai retiré ma phrase tout de suite. J'ai cru être aller assez vite pour que personne ne la lise... Perdu... :huh: Encore merci... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 31 mars 2018 Posté(e) le 31 mars 2018 Car ta fonction ListBox retourne un nombre. !!?? Essaye :(listbox "Test" "" (mapcar 'cons '("A" "B" "C") '("A" "B" "C")) 1) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 31 mars 2018 Auteur Posté(e) le 31 mars 2018 Alors ça, ça me la coupe... :) Mais je comprend maintenant pourquoi je me suis trompé, je n'utilise que des paires pointés (nombre . chaine), donc, le retour était toujours un nombre... En fait, c'était la clef, quelle qu'elle soit, nombre ou chaine... Encore merci... Une fois de plus... ;) Voici mon test final, que je vais intégrer à mon code qui en avait besoin :(defun c:CherchView (/ TblView LstView ValView) (while (setq TblView (tblnext "VIEW" (not TblView))) (setq LstView (cons (cdr (assoc 2 TblView)) LstView)) ) ;_ Fin de while (setq LstView (vl-sort LstView '<)) (setq ValView (listbox "Choix de la vue" "" (mapcar 'cons LstView LstView) 1)) (princ ValView) (princ) ) ;_ Fin de defun Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 31 mars 2018 Auteur Posté(e) le 31 mars 2018 Oulala, je comprend maintenant que je me bornais à des paires pointés ((nombre . chaine)...) et je faisais, à posteriori, le tri avec (assoc entre la clef retournée par ListBox avec la liste originale... Maintenant, ma clef va être la chaine grace à ce type de paire : ((chaine1 . chaine1) (chaine2 . chaine2)...) et plus d'assoc pour connaitre le choix de l'opérateur... Encore un grand merci (gile) pour tes explications et cette commande : ListBox, que j'utilise souvent... J'avais bien lu ton exemple dans la fonction ListBox, mais j'ai zappé à cause du mapcar, que j'ai toujours du mal à comprendre, mais je ne perd pas espoir... Grace à vous tous... ;) Un Denis content... ;) Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant