DenisHen Posté(e) le 13 octobre 2016 Posté(e) le 13 octobre 2016 Bonjour à tous. Aujourd'hui, je tente de lire une liste de ligne, dans un fichier ASCII, que j'ajoute dans une liste.Le contenu de mon fichier est :;Liste des dessinateurs : Prénon NOM;Genre (H=Homme / F=Femme)Alexandra XXXX;FAnnie YYYYY;FDenis ZZZZZ;HEt mon code est :(defun c:testFich (/ fichier File Lign FichLstDess LignDess LstDess) (setq fichier (findfile "Doss_IC_Dess.DenisH")) (princ (strcat "\nFichier : " fichier "\n")) (setq File (open Fichier "r")) (while (setq Lign (read-line File)) (if (/= (substr Lign 1 1) ";") (progn (setq FichLstDess (list FichLstDess Lign)) (setq LignDess (str2lst Lign ";")) (setq LstDess (list LstDess (car LignDess))) ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de while (close File) (princ (strcat "\nFichLstDess : " FichLstDess "\n")) (princ (strcat "\nLstDess : " LstDess "\n")) (princ) )Mon problème : je n'arrive pas à ajouter des string dans mes listes... AutoCAD me répond :Commande: TESTFICHFichier : C:\config\autocad\lisp\Doss_IC_Dess.DenisH; erreur: type d'argument incorrect: stringp (((nil "Alexandra XXXX;F") "Annie YYYYY;F") "Denis ZZZZZ;H")Commande: L'aide en anglais ne me dit pas grand chose... J'ai essayé avec des (append, (list, (cons... Si quelqu'un a une astuce, une idée, un conseil... 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)
Patrick_35 Posté(e) le 13 octobre 2016 Posté(e) le 13 octobre 2016 Salut Comment est ta liste ?De cette manière ?'(("Liste des dessinateurs" ("Alexandra" "XXXX" "F") ("Annie" "YYYYY" "F") ("Denis" "ZZZZZ" "H")) ("Liste autre" ("Toto" "XXXX" "H") ("Titi" "XXXX" "F") ("Gros Minet" "XXXX" "H")) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 13 octobre 2016 Auteur Posté(e) le 13 octobre 2016 Salut Patrick. En fait, j'aimerais construire mes listes de cette façon :FichLstDess => ("Alexandra XXXX;F" "Annie YYYYY;F" "Denis ZZZZZ;H")LstDess => ("Alexandra XXXX" "Annie YYYYY" "Denis ZZZZZ")Mais j'ai du mal à ne pas faire une liste dans une liste... :huh: 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)
Patrick_35 Posté(e) le 13 octobre 2016 Posté(e) le 13 octobre 2016 Mais j'ai du mal à ne pas faire une liste dans une liste... :huh:Lâche-toi. Le tout est de savoir la gérer ensuite. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 13 octobre 2016 Auteur Posté(e) le 13 octobre 2016 Lâche-toi. Le tout est de savoir la gérer ensuite.Merci pour les encouragements, mais j'ai déjà du mal avec un fichier ASCII, alors avec Excel... C'est pô gagné... ;) 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 13 octobre 2016 Posté(e) le 13 octobre 2016 Salut, La fonction cons est, avec car et cdr un des fondements de tous les langages LISP qui sont basés sur le traitement des listes (LISt Processing).Voir ce sujet. Ce sachant, il est généralement préférable de construire une liste avec cons quitte à inverser la liste une fois qu'elle est finalisée. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Olivier Eckmann Posté(e) le 14 octobre 2016 Posté(e) le 14 octobre 2016 Bonjour si tu veux ajouter un élément à une liste, ajoute lui une liste constituée de l'élément (setq lsElt nil) (setq lsElt (append lsElt (list "aaa"))) (setq lsElt (append lsElt (list "bbb"))) (setq lsElt (append lsElt (list "ccc"))) ton objet lsElt vaut ("aaa" "bbb" "ccc") Olivier
DenisHen Posté(e) le 16 octobre 2016 Auteur Posté(e) le 16 octobre 2016 Salut, et merci à vous... Je "commence" à comprendre ce foutu phénomène de liste... (je n'ai jamais appris à développer...ça explique peut-être celà... Bien que je ne dois pas être le seul... ;) ) J'entame une procédure de teste pour mieux les appréhender... Mais ce n'est pas évident... (setq ListOB "aaa" "bbb") (car ListOB) ==> "aaa" (cdr ListOB) ==> ("bbb") Le premier est une chaine, ok... Mais pourquoi "aaa" et pas ("aaa") ?... Le second cdr est.. une liste... Difficile à comprendre, bien que très logique... car cdr est bien la liste exclue du premier élément... donc une liste... Mais comment "choper" le second élément pour qu'il soit une chaine...(cadr ? (nth 2 ? Quel est le plus concis ? Dans l'excellent "Introduction au Lisp" de maître (gile), on voit :(cdr '(6 1 8) retourne : (1 8)Et en même temps :(setq lst '((1 2 3) (4 5 6) (7 8 9)))(caddar lst) retourne : 3C'est là que c'est déroutant... Pourquoi caddar lst n'est pas (3) mais 3 ? ? Perso, je trouve ça "curieux"... Mais ce n'est pas très grave (bien que)... Car petit à petit, j'arrive à faire ce que je veux... J’essaierai de "démocratiser" ce que je tente de faire... : lire une liste de nom lue dans un fichier Excel (xls) et en faire le tri avec pour "tri primal", la colonne A, et les Prénom NOM dans la colonne B... Je m'étendrais un peu plus quand ça sera terminé... (au passage, merci à Patrick_35 pour son aide entre AutoLisp et Excel...) 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 16 octobre 2016 Posté(e) le 16 octobre 2016 Salut, (setq lst '((1 2 3) (4 5 6) (7 8 9)))(caddar lst) retourne : 3 (caddar lst) est un raccourci pour :(car (cdr (cdr (car '((1 2 3) (4 5 6) (7 8 9))))))) =>(car (cdr (cdr '(1 2 3)))) =>(car (cdr '(2 3))) =>(car '(3)) =>3 nth permet d'obtenir le nième élément d'une liste, mais comme les liste LISP sont des listes dites "chainées" on n'accède au nième element d'une liste depuis le premier.(setq lst '(0 1 2 3 4 5 6 7 8 9))(nth 5 lst)retourne 5 mais en interne c'est le résultat de:(car (cdr (cdr (cdr (cdr (cdr lst))))))qu'on aurait aussi pu écrire :(caddr (cdddr lst))Autrement dit, la fonction nth pourrait être définie comme ça :(defun _nth (n lst) (car (repeat n (setq lst (cdr lst)))) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 18 octobre 2016 Auteur Posté(e) le 18 octobre 2016 Salut (gile), et merci pour ta réponse... En fait, j'utilise souvent (nth car mes listes sont "formatées"... Elles ont toutes le même nombre d'éléments... Merci encore pour cette précision... 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