DenisHen Posté(e) le 21 octobre 2010 Posté(e) le 21 octobre 2010 Bonjour à tous, Je cherche à alimenter une liste issue du contenu d'un .txt J'ai fini par choisir cette structure pour le fichier "Vendeur.txt" sans être convaincu que ce soit la meilleure :"Alexamdre M." "Christian B." "François B." "Issam B.A." "Jérémy R." "Johan B." "Kévin R." "Marc D." Et voici mon code :(defun c:TestTXT (/ Liste Fich) (setq Fich (open "Vendeur.txt" "r")) ;ouverture du TXT (setq Liste (read-line Fich)) ;remplit le liste avec lecture de la ligne du TXT (close Fich) ;fermeture du fichier TXT (princ Liste) ;affiche la liste ) ;_ Fin de defun Mon problème ? Le résultat : "\"Alexamdre M.\" \"Christian B.\" \"François B.\" \"Issam B.A.\" \"Jérémy R.\" \"Johan B.\" \"Kévin R.\" \"Marc D.\"" Mon code lit la totalité de la ligne (normal) et je me retrouve avec un seul élément dans ma liste... Ce qui est logique... Je pense donc à placer un seul nom par ligne dans le TXT et faire un "while not eof" pour remplire ma liste... Mais avant de me lancer, j'aimerai avoir vos avis sur ma "méthode"... Si c'est la bonne, s'il y a plus simple, plus court, plus sûr... Merci pour votre aide éventuelle, 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)
Titifonky Posté(e) le 21 octobre 2010 Posté(e) le 21 octobre 2010 Bonjour, Tu peux utiliser la fonction STRTOK présente sur cette page http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=13174#pid130401 pour transformer ta chaine de caractère en liste ;;; STRTOK (Vladimir Nesterovsky) Retourne une liste de chaines ;;; ex : (strtok "abc,def" ",") -> ("abc" "def") (defun strtok (strng chs / len c l s cnt chsl) (setq chsl (strtol chs)) (setq len (strlen strng) s "" cnt (1+ len) ) (while (> (setq cnt (1- cnt)) 0) (setq c (substr strng cnt 1)) (if (member c chsl) (if (strp s) (setq l (cons s l) s "" ) ) (setq s (strcat c s)) ) ) (if (strp s) (cons s l) l ) ) Etienne www.le-metal.net, sur la métallerie
Tramber Posté(e) le 21 octobre 2010 Posté(e) le 21 octobre 2010 Tu réponds toi-même à ta question :Mets donc un champs par ligne et boucle avec WHILE genre (while (setq Liste (read-line Fich))suivi d'un APPEND En Français, tu dois programmer : "tant que read-line, augmente la liste" quand read-line finira par renvoyer nil (quand il n'aura plus de ligne à lire dans le fichier), tu sortiras de la boucle while. Il n'y aura plus qu'à fermer le fichier. Ca va aller tout seul ou tu veux l'exemple ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
DenisHen Posté(e) le 21 octobre 2010 Auteur Posté(e) le 21 octobre 2010 Salut, Merci à vous deux... Je vais tenter de faire une boucle "while"... Je vais chercher la bonne syntaxe... Ca ne doit pas être sorcier ;) Merci encore 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)
DenisHen Posté(e) le 21 octobre 2010 Auteur Posté(e) le 21 octobre 2010 Salut,Je ne comprends plus rien, ma routine qui fonctionnait me sort maintenant : ; erreur: type d'argument incorrect: FILE nil Alors que je n'ai pas changé une seule virgule et mon TXT est toujours à la même place ! ! J'ai essayé çà :Mon txt en une ligne :Alexamdre M.,Christian B.,François B.,Issam B.A.,Jérémy R.,Johan B.,Kévin R.,Marc D. et mon lsp :(defun c:TestTXT (/ Liste Fich) (setq Fich (open "Vendeur.txt" "r")) (setq Liste (read-line Fich)) (strtok Liste ",") (close Fich) (princ Liste) ) ;_ Fin de defun ;;; STRTOK (Vladimir Nesterovsky) Retourne une liste de chaines ;;; ex : (strtok "abc,def" ",") -> ("abc" "def") ;Merci à (gile) (defun strtok (strng chs / len c l s cnt chsl) (setq chsl (strtol chs)) (setq len (strlen strng) s "" cnt (1+ len) ) ;_ Fin de setq (while (> (setq cnt (1- cnt)) 0) (setq c (substr strng cnt 1)) (if (member c chsl) (if (strp s) (setq l (cons s l) s "" ) ;_ Fin de setq ) ;_ Fin de if (setq s (strcat c s)) ) ;_ Fin de if ) ;_ Fin de while (if (strp s) (cons s l) l ) ;_ Fin de if ) ;_ Fin de defun Je vais me tourner vers VBA, dommage, j'aime bien le Lisp... Bonne nuit à tous, 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 22 octobre 2010 Posté(e) le 22 octobre 2010 Salut Je vais te faciliter la tâche (non testé) (defun c:TestTXT (/ Liste Fich texte) (setq Fich (open "Vendeur.txt" "r")) (while (setq texte (read-line Fich)) (setq Liste (cons texte Liste)) ) (close Fich) (princ (reverse Liste)) ) ;_ Fin de defun @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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