Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

J'ai un problème pour la réalisation de mon programme LISP.

J'ai une liste déroulante que je réalise avec avec un fichier DCL contenant les valeurs de la forme suivante:

'("30x20x6" "40x30x5.5" "160x110x4.5")

je cherches à extraire les chiffres composant la chaine de caractère et les convertir en nombre décimal pour les affecter ensuite à trois variables différentes.

Comment faut il faire?

Merci

Posté(e)

Salut,

 

La routine str2lst transforme un chaine avec séparateur en liste de chaines.

Dans ton exemple, le séparateur serait : "x", reste ensuite à convertir les chaînes en nombres.

 

(mapcar 'atof (str2lst "30x20x6" "x")) retourne (30.0 20.0 6.0)

 

PS : je met aussi la fonction réciproque lst2str.

 

;; str2lst (gile)
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur
;;
;; Exemples
;; (str2lst "a b c" " ") -> ("a" "b" "c")
;; (str2lst "1,2,3" ",") -> ("1" "2" "3")
;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3)

(defun str2lst (str sep / pos)
 (if (setq pos (vl-string-search sep str))
   (cons (substr str 1 pos)
  (str2lst (substr str (+ (strlen sep) pos 1)) sep)
   )
   (list str)
 )
)

;; lst2str (gile)
;; Concatène une liste de chaînes et un séparateur en une chaine
;;
;; Arguments
;; lst : la liste à transformer en chaine
;; sep : le séparateur
;;
;; Exemple
;; (lst2str '("a" "b" "c") " ") -> "a b c"

(defun lst2str (lst sep)
 (if (cadr lst)
   (strcat (car lst) sep (lst2str (cdr lst) sep))
   (car lst)
 )
)

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

Posté(e)

CHAR.LSP

COR.txt

 

 

Bonsoir,

 

Merci de m'avoir répondu. Tout d'abord, je ne comprend pas comment il faut faire pour extraire les valeurs situées dans la liste "(mapcar 'atof (str2lst "30x20x6" "x")) retourne (30.0 20.0 6.0)" puis les affecter à des variable.

 

Ensuite, J'ai repensé le déroulement de mon LISP et je vais le détailler par la suite.

Tout, d'abord j'ai un fichier texte "COR.txt" qui liste toute les dimensions dont j'ai besoin pour dessiner des cornières à ailes égales.

Les colonnes se présentent de la façon suivante:

Dimension des deux ailes, épaisseur des deux ailes, rayon, dimension des rayons aux extrémités, poids par mètre

 

Je souhaite utiliser les deux premières valeurs qui sont les dimensions et l'épaisseur des ailes pour créer une liste déroulante à l'aide d'une boite de dialogue. Je souhaite que les valeurs de la liste déroulante aient la forme suivant:

(setq type_corniere '(Dimension des deux ailesxDimension des deux ailesxépaisseur des deux ailes)

Comme vous pouvez le voir ci-dessous lorsque j'ai créé manuellement la liste déroulante.

 

(setq type_corniere '("20x20x3" "25x25x3" "25x25x4" "25x25x5" "30x30x3" "30x30x3.5" "30x30x4" "30x30x5" "35x35x3.5" "35x35x4"

"35x35x5" "40x40x3" "40x40x4" "40x40x5" "40x40x6" "45x45x3" "45x45x4" "45x45x4.5" "45x45x5" "45x45x6"

"50x50x3" "50x50x4" "50x50x5" "50x50x6" "50x50x7" "50x50x8" "55x55x6" "60x60x4" "60x60x5" "60x60x6"

"60x60x7" "60x60x8" "60x60x10" "65x65x5" "65x65x6" "65x65x7" "65x65x8" "65x65x9" "70x70x5" "70x70x6"

"70x70x7" "70x70x9" "75x75x5" "75x75x6" "75x75x7" "75x75x8" "75x75x10" "80x80x5" "80x80x5.5" "80x80x6"

"80x80x6.5" "80x80x8" "80x80x10" "90x90x6" "90x90x7" "90x90x8" "90x90x9" "90x90x10" "90x90x11" "90x90x12"

"100x100x7" "100x100x8" "100x100x9" "100x100x10" "100x100x11" "100x100x12" "110x110x10" "110x110x12" "120x120x8" "120x120x9"

"120x120x10" "120x120x11" "120x120x12" "120x120x13" "120x120x14" "120x120x15" "130x130x12" "140x140x13" "150x150x10" "150x150x12"

"150x150x14" "150x150x15" "150x150x16" "150x150x18" "160x160x15" "160x160x17" "180x180x16" "180x180x18" "180x180x20" "200x200x16"

"200x200x18" "200x200x20" "200x200x24"

))

 

Ensuite, en fonction du type de cornière sélectionné dans la liste déroulant le LISP va chercher les valeurs des quatre premières colonnes pour pouvoir dessiner la cornière.

Je vous ai mis en pièce jointe les fichiers "cor.txt", "Cornière.DCL" et "CHAR.LSP" pour que vous compreniez mieux ce que je souhaite faire.Le programme est un peu brouillon car j'ai fait plusieurs essais, observé plusieurs pistes sans trop savoir comment m'y prendre. Vous risquez de rigoler sur certaines lignes :-)

SI quelqu'un pouvait m'aider ce serait super car là je galère pas mal.

je pense avoir exposer l'ensemble du problème et n'avoir rien oublier si vous avez des questions n'hésitez pas.

Merci d'avance.

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é