DenisHen Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 Bonjour à la communauté. Je tente de trier une liste par ordre croissant : (setq ListTS (vl-sort ListTS '<)) Dans ma liste, je peut avoir "1;ST" "10;ST" "2;ST"... Le problème est qu'à la sortie du tri, j'ai "10;ST" "1;ST" "2;ST"... Je préfèrerais avoir "1;ST" "2;ST" "10;ST", avec le 10 plus grand que 1 et 2... Si quelqu'un a une astuce, un conseil... 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 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 Coucou Luna et merci pour ton aide. J'ai tenté ton code : (setq ListTS (vl-sort ListTS '(lambda (s1 s2 / x1 x2) (if (= (setq x1 (substr s1 5 13)) (setq x2 (substr s2 5 13)) ) ;_ Fin de = (< (substr s1 (- (strlen s1) 5)) (substr s2 (- (strlen s2) 5)) ) ;_ Fin de < (< x1 x2) ) ;_ Fin de if ) ;_ Fin de lambda ) ;_ Fin de vl-sort ) ;_ Fin de setq Mais à la sortie du tri, j'ai "2;ST" "1;ST" "10;ST"... J'aurais peut-être du préciser que les éléments de la liste sont plus long que ça, ils ressembleraient plus à : ("1;ST25C;600;240" "10;ST25C;450;240" "2;ST25;200;240" .....) 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)
VDH-Bruno Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 Bonjour, Pour compléter la réponse complète de @Luna sur le sujet. Je ferais remarquer que pour simplifier le code, dans le cas présent tes chaines de caractère sont "systématiquement" NumériqueAlpha et non AlphaNumérique (en ce qui concerne ton critère de trie) Tu peux tenter la ligne de code suivante au moyen de la fonction read: (vl-sort ListTS '(lambda (e1 e2) (< (read e1) (read e2)))) Cdt Bruno Apprendre => Prendre => Rendre
DenisHen Posté(e) le 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 Bonjour Bruno et mille mercis pour ton aide, ça fonctionne parfaitement. 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)
Luna Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 Coucou, Vui c'est un peu le problème, c'est qu'il est difficile de trouver une solution généralisée pour ce genre de soucis... La réponse de @VDH-Bruno semble parfaite pour ton cas, mais dans le cas où le premier élément est présent dans plusieurs chaînes de caractères, le tri sera moins efficient. Vu la structure, j'aurais fais le tri via un (str2lst) pour comparer chaque premier élément de la liste de retour, puis le second si équivalent, etc... Mais je reconnais que le jour où je met la main sur une fonction de tri généralisée capable de gérer n'importe quelle structure de chaîne de caractères pour la trier correctement d'un point de vue alphanumérique, chat sera du pain béni à mes yeux !! Bisous, Luna
VDH-Bruno Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 @DenisHen: Pour compléter la fonction atoi en remplacement de la fonction read aurait tout aussi bien fait le travail Apprendre => Prendre => Rendre
DenisHen Posté(e) le 27 juillet 2022 Auteur Posté(e) le 27 juillet 2022 Merci à vous deux pour votre aide... 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)
VDH-Bruno Posté(e) le 27 juillet 2022 Posté(e) le 27 juillet 2022 il y a 4 minutes, Luna a dit : Coucou, Vui c'est un peu le problème, c'est qu'il est difficile de trouver une solution généralisée pour ce genre de soucis... La réponse de @VDH-Bruno semble parfaite pour ton cas, mais dans le cas où le premier élément est présent dans plusieurs chaînes de caractères, le tri sera moins efficient. Vu la structure, j'aurais fais le tri via un (str2lst) pour comparer chaque premier élément de la liste de retour, puis le second si équivalent, etc... Mais je reconnais que le jour où je met la main sur une fonction de tri généralisée capable de gérer n'importe quelle structure de chaîne de caractères pour la trier correctement d'un point de vue alphanumérique, chat sera du pain béni à mes yeux !! Bisous, Luna Oui tout fait d'accord j'ai répondu avec la ligne de code basé sur le premier msg de @DenisHen, cette ligne trie en fonction des quantitatifs de TS, mais ne prend pas en compte le dimension de panneau de TS, comme dans le deuxième message de @DenisHen dans ce cas il faut découper la chaine avec la fonction (str2lst) de @(gile), puis effectuer le trie Apprendre => Prendre => Rendre
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