cadpolo Posté(e) le 31 octobre 2006 Posté(e) le 31 octobre 2006 Salut a vous ..... Voila....Je me retourne de nouveau vers vous, car je n'arrive pas à récupérer et à additionner les données d'une liste .... (defun c:test () ;initialisation des listes (setq list_pt ()) (setq list_plength () ) (setq add_list_plength () ) (setq sp (getpoint "\n Point de départ: " )) (while (/= nil (setq ep (getpoint sp "\n Point suivant: " ))) (setq plength (distance sp ep )) [b] (setq list_plength ( append list_plength ( list plength )))[/b] ;;;Cette ligne me retourne une liste de nombre ;;; [surligneur] ( 1.414 1.414 2.285 )[/surligneur] ;;;et j'aimerais récupérer chaque atome de cette liste pour les additionner ... (setq sp ep ) );fin de while (setq length_list (length list_plength )) jusqu'ici tout va bien ... (setq n 0 ) (while (< n length_list ) (setq total_length_list (nth n list_plength )) ;;;(read list_plength ) ;;;(setq add_list_plength (substr list_plength 2 2));;;(setq add_list_plength ( 1+ total_length_list )) (print total_length_list ) ;;;ce test me retourne les éléments de la liste et la boucle marche .... (setq n (1+ n )) );fin de while(princ) );fin de defun (substr string start [length]) j'ai penser utiliser ( substr (list_plength) (nth n list_plength) [length] )mais une distance étant un nombre a virgule dans le cas de mon projet (length) étant un reèlle je ne vois pas comment sortir un nombre ex: 1.414 . Et puis je pense que ce code peux servir pour autre chose ...... (setq list_pt (append list_pt ( list sp ) (list ep ))) LIST_PT = ((0.0 0.0 0.0) (1.0 1.0 0.0) (1.0 1.0 0.0) (2.0 2.0 0.0) (2.0 2.0 0.0) (3.0 3.0 0.0)) Bon voila ....Si vous pouvez me renseigner ......
cadpolo Posté(e) le 31 octobre 2006 Auteur Posté(e) le 31 octobre 2006 Il y a cette possibilité, j'ai le code mes de Patrick qui m'a un peu éclairé ..... (defun c:test () ;initialisation des listes (setq plength 0 ) (setq sp (getpoint "\n Point de départ: " )) (while (/= nil (setq ep (getpoint sp "\n Point suivant: " ))) (setq plength (+ plength (distance sp ep ))) (setq sp ep ) );fin de while (print plength ) (princ) );fin de defun Ca marche bien, en faite j'ingorais que l'on pouvait additionner des variables avec elles meme .Peux etre que je me complique trop la tache .... Mais j'aimerais quand même savoir comment extraire des données réelles d'une liste ?????.
Bred Posté(e) le 31 octobre 2006 Posté(e) le 31 octobre 2006 Salut, Il y cette manière (il doit y avoir plus simple) : (setq liste '(1.414 1.414 2.285)) (setq x 0 ad 0) (repeat (length liste) (setq ad (+ [b] (nth x liste)[/b] ad)) (setq x (+ x 1)) ) (princ ad) (princ) [Edité le 31/10/2006 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Patrick_35 Posté(e) le 31 octobre 2006 Posté(e) le 31 octobre 2006 Pour Bred(apply '+ '(1.414 1.414 2.285)) Pour cadpolo(nth n liste) extrait le niem élément de liste @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ElpanovEvgeniy Posté(e) le 31 octobre 2006 Posté(e) le 31 octobre 2006 (princ (apply(function +) '(1.414 1.414 2.285))) (princ) [Edité le 31/10/2006 par ElpanovEvgeniy] Evgeniy
cadpolo Posté(e) le 31 octobre 2006 Auteur Posté(e) le 31 octobre 2006 Merci les gars .... Mais et le subtstr (substr string start [length]) j'ai penser utiliser ( substr (list_plength) (nth n list_plength) [length] )mais une distance étant un nombre a virgule dans le cas de mon projet (length) étant un reèlle je ne vois pas comment sortir un nombre ex: 1.414 .
Patrick_35 Posté(e) le 31 octobre 2006 Posté(e) le 31 octobre 2006 Mais et le subtstr Il sert à remplacer une chaine de caractères par un autre @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 31 octobre 2006 Posté(e) le 31 octobre 2006 Mais et le subtstr substr est une fonction qui retourne une portion de chaine de caractère (string) : (substr "string" 3) retourne "ring" (substr "string" 2 3) retourne "tri" Je ne comprends pas bien ce que tu veux faire, alors quelques exemples : (nth 0 '(1.414 1.732 2.285)) retourne 1.414 pemier élément (nth 1 '(1.414 1.732 2.285)) retourne 1.732 deuxième élément (nth 2 '(1.414 1.732 2.285)) retourne 2.285 troisième élément (member 1.732 '(1.414 1.732 2.285)) retourne (1.732 2.285) la liste à partir de 1.732 Hé ben, c'est qui Lucky Luke ? [Edité le 31/10/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 31 octobre 2006 Posté(e) le 31 octobre 2006 De 15h37 à 22h12 et 22h17Il ne faut pas être trop pressé ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ElpanovEvgeniy Posté(e) le 1 novembre 2006 Posté(e) le 1 novembre 2006 Probablement, j'ai compris mal la tâche... :exclam: L'exemple du travail avec la liste, comme avec le texte(substr string start [length])(test liste start length) (defun test (lst s e) (if (> s 1) (test (cdr lst) (1- s) e) (if (and lst (or (not e)(> e 0))) (cons (car lst) (test (cdr lst) s (if e(1- e)))) ) ;_ if ) ;_ if ) ;_ defun ;; Le test (test '("a" "b" "c" "d" "e" "f") 1 nil);=>("a" "b" "c" "d" "e" "f") (test '("a" "b" "c" "d" "e" "f") 3 nil);=>("c" "d" "e" "f") (test '("a" "b" "c" "d" "e" "f") 1 3);=>("a" "b" "c") (test '("a" "b" "c" "d" "e" "f") 3 2);=>("c" "d") Evgeniy
cadpolo Posté(e) le 2 novembre 2006 Auteur Posté(e) le 2 novembre 2006 Re merci les gars ..... Tout simplement définition autocad [surligneur] (substr string start [length]) [/surligneur] je pensais à ça : (substr (string) qui est ma (list_plength) => (1.414 1.732 2.285) les chiffres contenus dans la liste sont t'ils des String ou real ????? (setq plength (distance sp ep )) (setq list_plength ( append list_plength ( list plength ))) vu que la distance retourné est un chiffre .... dans quel cas Substr ne marche pas ?????? (start) = (nth n list_plength) mon ième élément de la liste càd n=0 et list_plength :1.414 (length) = nombre de chiffre après la virgule ..... mais là stupido ????? En faite voila je ne sais pas si j'ai été claire ???????
didier Posté(e) le 2 novembre 2006 Posté(e) le 2 novembre 2006 coucou, je veux bien qu'on reprenne calmement,car je suis ce message depuis quelques jours etje ne pige rien, mais vraiment rien du tout du but final... Désolé de ne pouvoir participer faute de comprenette... amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
cadpolo Posté(e) le 2 novembre 2006 Auteur Posté(e) le 2 novembre 2006 Bon ..... :cool: Dans mon code , je calcule une distance, (setq plength (distance sp ep )) que je renvois a une liste (setq list_plength ( append list_plength ( list plength )))dans ce cas => (1.414 1.732 2.285) et avec Substr je voudrais récupérer chaque element de cette liste pour les additionnés . Donc j'ai pensé à (start) = (nth n list_plength) mon ième élément de la liste càd n=0 et list_plength :1.414 et (length) = nombre de chiffre après la virgule (mais dans ce cas après réflexion ne marche pas )
(gile) Posté(e) le 2 novembre 2006 Posté(e) le 2 novembre 2006 Comme dit plus haut, substr traite une chaine de caractères (premier argument). Tu veux traiter une liste, donc oublie substr. Comme dit plus haut toujours, pour avoir la somme de tous les nombres contenus dans list_plength, tu peux utiliser la fonction apply : (apply '+ '(1.414 1.732 2.285)) ->5.431 La fonction apply équivaut à un (eval (cons ...)), on pourait donc écrire : (eval (cons '+ '(1.414 1.732 2.285))) qui est interprété, en décomposant : (eval '(+ 1.414 1.732 2.285))) -> (+ 1.414 1.732 2.285) -> 5.431 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ElpanovEvgeniy Posté(e) le 2 novembre 2006 Posté(e) le 2 novembre 2006 (defun 3d-pt (lst) (if lst (cons (list (car lst) (cadr lst)(caddr lst)) (3d-pt (cdddr lst))) ) ;_ if ) (3d-pt '("a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l")) ; => (("a" "b" "c") ("d" "e" "f") ("g" "h" "i") ("j" "k" "l")) Evgeniy
cadpolo Posté(e) le 2 novembre 2006 Auteur Posté(e) le 2 novembre 2006 Ok ......j'oublis ......Substr pour mon code ...... Merci à tout le monde .....
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