Sous AutoLISP (lisp sour AutoCAD), il y a une fonction qui trie une liste de string de façon surprenante: (acad_strlsort '("1" "3" "_" "a" "A" "b" "B")) me renvoie ceci: ("_" "1" "3" "a" "A" "b" "B") Notez la position incongrue du "_"
J'aimerai que perl trie de la même façon qu'AutoLISP.
J'ai cherché les charset, je ne trouve pas celui qui met l'underscore avant l'alphabet.
Quel est donc ce charset et comment l'utiliser dans perl ?
Il n'y a pas que le _ qui pose problème. Le tri des majuscules et des minuscules est aussi particulier (par rapport à un tri sur les points de code par exemple).
À première vue, l'ordre peut correspondre à ce que propose Unicode::Collate par défaut :
Sous AutoLISP (lisp sour AutoCAD), il y a une fonction qui trie une
liste de string de façon surprenante:
(acad_strlsort '("1" "3" "_" "a" "A" "b" "B")) me renvoie ceci: ("_"
"1" "3" "a" "A" "b" "B")
Notez la position incongrue du "_"
J'aimerai que perl trie de la même façon qu'AutoLISP.
J'ai cherché les charset, je ne trouve pas celui qui met l'underscore
avant l'alphabet.
Quel est donc ce charset et comment l'utiliser dans perl ?
Il n'y a pas que le _ qui pose problème. Le tri des majuscules et des
minuscules est aussi particulier (par rapport à un tri sur les points de
code par exemple).
À première vue, l'ordre peut correspondre à ce que propose
Unicode::Collate par défaut :
Sous AutoLISP (lisp sour AutoCAD), il y a une fonction qui trie une liste de string de façon surprenante: (acad_strlsort '("1" "3" "_" "a" "A" "b" "B")) me renvoie ceci: ("_" "1" "3" "a" "A" "b" "B") Notez la position incongrue du "_"
J'aimerai que perl trie de la même façon qu'AutoLISP.
J'ai cherché les charset, je ne trouve pas celui qui met l'underscore avant l'alphabet.
Quel est donc ce charset et comment l'utiliser dans perl ?
Il n'y a pas que le _ qui pose problème. Le tri des majuscules et des minuscules est aussi particulier (par rapport à un tri sur les points de code par exemple).
À première vue, l'ordre peut correspondre à ce que propose Unicode::Collate par défaut :
mais, sans informations plus précises ou des exemples plus complets, c'est absolument sans garantie ! ;-)
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
Carboleum
Le Wed, 20 Apr 2011 17:38:04 +0200, Paul Gaborit a écrit:
Il n'y a pas que le _ qui pose problème. Le tri des majuscules et de s minuscules est aussi particulier (par rapport à un tri sur les point s de code par exemple).
En effet, j'avais pas fait attention. D'après mes tests, il ne tient p as compte de la casse. Ce qui n'est pas forcément étonnant pour AutoCAD ;-)
mais, sans informations plus précises ou des exemples plus complets, c'est absolument sans garantie ! ;-)
C'est vrais que mon exemple était un peu laconique...
Je cherche donc à reproduire en perl la méthode de tri utilisée pa r AutoLISP pour trier des noms de fichiers:
en AutoLISP: (mapcar 'print (acad_strlsort (vl-directory-files "c:/__Lisp/mngt/test") ))
Uniode::Collate->sort a un comportement très intéressant; Mais pas d ans mon cas puisque le "_" doivent être en premier, c'est-à-dire être considéré comme un caractère significatif.
Tout porte à croire que si je parviens à dire à perl de ne pas ten ir compte de la casse, j'ai gagné:
Ca fonctionne mais c'est pas très propre... Existe-t-!l un charset qui place les chiffres entre le underscore et les lettre minuscules ?
Merci
-- http://carboleum.be
Le Wed, 20 Apr 2011 17:38:04 +0200, Paul Gaborit
<Paul.Gaborit@invalid.invalid> a écrit:
Il n'y a pas que le _ qui pose problème. Le tri des majuscules et de s
minuscules est aussi particulier (par rapport à un tri sur les point s de
code par exemple).
En effet, j'avais pas fait attention. D'après mes tests, il ne tient p as
compte de la casse. Ce qui n'est pas forcément étonnant pour AutoCAD ;-)
mais, sans informations plus précises ou des exemples plus complets,
c'est absolument sans garantie ! ;-)
C'est vrais que mon exemple était un peu laconique...
Je cherche donc à reproduire en perl la méthode de tri utilisée pa r
AutoLISP pour trier des noms de fichiers:
en AutoLISP:
(mapcar 'print (acad_strlsort (vl-directory-files "c:/__Lisp/mngt/test") ))
Uniode::Collate->sort a un comportement très intéressant; Mais pas d ans
mon cas puisque le "_" doivent être en premier, c'est-à-dire être
considéré comme un caractère significatif.
Tout porte à croire que si je parviens à dire à perl de ne pas ten ir
compte de la casse, j'ai gagné:
Le Wed, 20 Apr 2011 17:38:04 +0200, Paul Gaborit a écrit:
Il n'y a pas que le _ qui pose problème. Le tri des majuscules et de s minuscules est aussi particulier (par rapport à un tri sur les point s de code par exemple).
En effet, j'avais pas fait attention. D'après mes tests, il ne tient p as compte de la casse. Ce qui n'est pas forcément étonnant pour AutoCAD ;-)
mais, sans informations plus précises ou des exemples plus complets, c'est absolument sans garantie ! ;-)
C'est vrais que mon exemple était un peu laconique...
Je cherche donc à reproduire en perl la méthode de tri utilisée pa r AutoLISP pour trier des noms de fichiers:
en AutoLISP: (mapcar 'print (acad_strlsort (vl-directory-files "c:/__Lisp/mngt/test") ))
Uniode::Collate->sort a un comportement très intéressant; Mais pas d ans mon cas puisque le "_" doivent être en premier, c'est-à-dire être considéré comme un caractère significatif.
Tout porte à croire que si je parviens à dire à perl de ne pas ten ir compte de la casse, j'ai gagné:
C'est vrais que mon exemple était un peu laconique...
C'est le moins qu'on puisse dire. ;-)
Je cherche donc à reproduire en perl la méthode de tri utilisée par AutoLISP pour trier des noms de fichiers:
en AutoLISP: (mapcar 'print (acad_strlsort (vl-directory-files "c:/__Lisp/mngt/test")))
[...]
Existe-t-!l un charset qui place les chiffres entre le underscore et les lettre minuscules ?
Une petite recherche sur internet montre bien que la fonction acad_strlsort ne se base pas du tout sur un charset quelconque...
La page ci-dessous donne un très bonne aperçu de ce que ça donne pour les caractères pris un à un : <http://autocad.xarch.at/news/faq/misc/strlsort-bug.html>
C'est déjà un bon départ pour réaliser votre propre fonction de tri.
Mais quand on voit l'ordre ci-dessus, on se dit qu'il est fort possible que cette fonction fasse en fait appel à la fonction de tri des noms de fichiers de Windows qui est très particulière. Pour en être sûr, testez-la avec des noms qui comporte des nombres. Par exemple "a8", "a9", "a10"... Si "a10" sort en dernier alors vous pouvez en être sûr.
Dans ce cas, cherchez des fonctions appelées "natural sort" ou "human sort". Il y a par exemple lemodule CPAN Sort-Key qui propose la fonction 'natsort' dans Sort::Key::Natural.
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
C'est vrais que mon exemple était un peu laconique...
C'est le moins qu'on puisse dire. ;-)
Je cherche donc à reproduire en perl la méthode de tri utilisée par
AutoLISP pour trier des noms de fichiers:
en AutoLISP:
(mapcar 'print (acad_strlsort (vl-directory-files "c:/__Lisp/mngt/test")))
[...]
Existe-t-!l un charset qui place les chiffres entre le underscore et
les lettre minuscules ?
Une petite recherche sur internet montre bien que la fonction
acad_strlsort ne se base pas du tout sur un charset quelconque...
La page ci-dessous donne un très bonne aperçu de ce que ça donne pour
les caractères pris un à un :
<http://autocad.xarch.at/news/faq/misc/strlsort-bug.html>
C'est déjà un bon départ pour réaliser votre propre fonction de tri.
Mais quand on voit l'ordre ci-dessus, on se dit qu'il est fort possible
que cette fonction fasse en fait appel à la fonction de tri des noms de
fichiers de Windows qui est très particulière. Pour en être sûr,
testez-la avec des noms qui comporte des nombres. Par exemple "a8",
"a9", "a10"... Si "a10" sort en dernier alors vous pouvez en être sûr.
Dans ce cas, cherchez des fonctions appelées "natural sort" ou "human
sort". Il y a par exemple lemodule CPAN Sort-Key qui propose la fonction
'natsort' dans Sort::Key::Natural.
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
C'est vrais que mon exemple était un peu laconique...
C'est le moins qu'on puisse dire. ;-)
Je cherche donc à reproduire en perl la méthode de tri utilisée par AutoLISP pour trier des noms de fichiers:
en AutoLISP: (mapcar 'print (acad_strlsort (vl-directory-files "c:/__Lisp/mngt/test")))
[...]
Existe-t-!l un charset qui place les chiffres entre le underscore et les lettre minuscules ?
Une petite recherche sur internet montre bien que la fonction acad_strlsort ne se base pas du tout sur un charset quelconque...
La page ci-dessous donne un très bonne aperçu de ce que ça donne pour les caractères pris un à un : <http://autocad.xarch.at/news/faq/misc/strlsort-bug.html>
C'est déjà un bon départ pour réaliser votre propre fonction de tri.
Mais quand on voit l'ordre ci-dessus, on se dit qu'il est fort possible que cette fonction fasse en fait appel à la fonction de tri des noms de fichiers de Windows qui est très particulière. Pour en être sûr, testez-la avec des noms qui comporte des nombres. Par exemple "a8", "a9", "a10"... Si "a10" sort en dernier alors vous pouvez en être sûr.
Dans ce cas, cherchez des fonctions appelées "natural sort" ou "human sort". Il y a par exemple lemodule CPAN Sort-Key qui propose la fonction 'natsort' dans Sort::Key::Natural.
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
Carboleum
Le Thu, 21 Apr 2011 00:14:28 +0200, Paul Gaborit a écrit:
La page ci-dessous donne un très bonne aperçu de ce que ça donne pour les caractères pris un à un : <http://autocad.xarch.at/news/faq/misc/strlsort-bug.html>
J'avais oublié autocad.xarch.at... il faut dire qu'il ne semble plus maintenu depuis belle lurettes.
C'est déjà un bon départ pour réaliser votre propre fonction d e tri.
Mais quand on voit l'ordre ci-dessus, on se dit qu'il est fort possibl e que cette fonction fasse en fait appel à la fonction de tri des noms de fichiers de Windows qui est très particulière.
En effet ca ressemble à l'ordre de l'explorer Windows.
Pour en être sûr, testez-la avec des noms qui comporte des nombres. Par exemple "a8", "a9", "a10"... Si "a10" sort en dernier alors vous pouvez en être sû r.
Non, acad_strlsort imite Windows, mais pas jusque là ;-)
Dans ce cas, cherchez des fonctions appelées "natural sort" ou "huma n sort". Il y a par exemple lemodule CPAN Sort-Key qui propose la foncti on 'natsort' dans Sort::Key::Natural.
Comme je maitrise mieux AutoLISP, je crois que je vais plutôt utiliser une fonction AutoLISP qui trie convenablement (sisi ca existe). L'essentiel est que les deux AutoCAD et PERL trient de la même façon.
En tous cas, grand merci!
à +
-- http://carboleum.be
Le Thu, 21 Apr 2011 00:14:28 +0200, Paul Gaborit
<Paul.Gaborit@invalid.invalid> a écrit:
La page ci-dessous donne un très bonne aperçu de ce que ça donne pour
les caractères pris un à un :
<http://autocad.xarch.at/news/faq/misc/strlsort-bug.html>
J'avais oublié autocad.xarch.at... il faut dire qu'il ne semble plus
maintenu depuis belle lurettes.
C'est déjà un bon départ pour réaliser votre propre fonction d e tri.
Mais quand on voit l'ordre ci-dessus, on se dit qu'il est fort possibl e
que cette fonction fasse en fait appel à la fonction de tri des noms de
fichiers de Windows qui est très particulière.
En effet ca ressemble à l'ordre de l'explorer Windows.
Pour en être sûr,
testez-la avec des noms qui comporte des nombres. Par exemple "a8",
"a9", "a10"... Si "a10" sort en dernier alors vous pouvez en être sû r.
Non, acad_strlsort imite Windows, mais pas jusque là ;-)
Dans ce cas, cherchez des fonctions appelées "natural sort" ou "huma n
sort". Il y a par exemple lemodule CPAN Sort-Key qui propose la foncti on
'natsort' dans Sort::Key::Natural.
Comme je maitrise mieux AutoLISP, je crois que je vais plutôt utiliser une
fonction AutoLISP qui trie convenablement (sisi ca existe). L'essentiel
est que les deux AutoCAD et PERL trient de la même façon.
Le Thu, 21 Apr 2011 00:14:28 +0200, Paul Gaborit a écrit:
La page ci-dessous donne un très bonne aperçu de ce que ça donne pour les caractères pris un à un : <http://autocad.xarch.at/news/faq/misc/strlsort-bug.html>
J'avais oublié autocad.xarch.at... il faut dire qu'il ne semble plus maintenu depuis belle lurettes.
C'est déjà un bon départ pour réaliser votre propre fonction d e tri.
Mais quand on voit l'ordre ci-dessus, on se dit qu'il est fort possibl e que cette fonction fasse en fait appel à la fonction de tri des noms de fichiers de Windows qui est très particulière.
En effet ca ressemble à l'ordre de l'explorer Windows.
Pour en être sûr, testez-la avec des noms qui comporte des nombres. Par exemple "a8", "a9", "a10"... Si "a10" sort en dernier alors vous pouvez en être sû r.
Non, acad_strlsort imite Windows, mais pas jusque là ;-)
Dans ce cas, cherchez des fonctions appelées "natural sort" ou "huma n sort". Il y a par exemple lemodule CPAN Sort-Key qui propose la foncti on 'natsort' dans Sort::Key::Natural.
Comme je maitrise mieux AutoLISP, je crois que je vais plutôt utiliser une fonction AutoLISP qui trie convenablement (sisi ca existe). L'essentiel est que les deux AutoCAD et PERL trient de la même façon.