[R] Bug ? _arraysort()

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
SurPriseS
Niveau 6
Niveau 6
Messages : 291
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

[R] Bug ? _arraysort()

#1

Message par SurPriseS »

Bonjour !
J'ai un petit script qui analyse un dossier, avec des fichiers dedans nommé par des numéros, j'utilise un _arraysort pour les mettre dans l'ordre et pouvoir avoir le dernier numéros, jusque là tout allais bien, sauf qu'en passant les 10 000, y'a un "bug"...

Si on à un dossier avec dedans :
7900
8900
9900
10000
90000
....

La fonction va nous ranger :
10000
7900
8900
90000
9900

C'est un peu ballot du coup...
Je peut mettre un bout de code, mais ça changeras pas grand chose je pense...
J'ai essayer de regardé le code dans array.au3 et j'ai l'impression qu'il regarde caractère par caractère pour faire le rangement...

Si quelqu'un as une solution ! Merci ;)
Modifié en dernier par SurPriseS le mer. 17 févr. 2016 16:16, modifié 1 fois.
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Bug ? _arraysort()

#2

Message par GhostLine »

Il doit effectivement y avoir un bug ...

On dirait qu'_arraysort() ajoute un caractère pour "égaliser" tous les membres de son array, mais le fait du mauvais coté :

79000
89000
99000
10000
90000
(ce qui donne ton résultat de classement)

au lieu de faire
07900
08900
09900
10000
90000

Pour moi, la solution serait de se substituer à cette "mise à niveau" en le faisant en amont : si la longueur de ton nom de fichier/répertoire est inférieure à la plus grande chaine du tableau, alors on ajoute autant de 0 que nécessaire devant ce nom de fichier/répertoire.
SurPriseS
Niveau 6
Niveau 6
Messages : 291
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Bug ? _arraysort()

#3

Message par SurPriseS »

J'ai tester en renommant les fichier en 09xxx et en effet ça marche... Je vais tricher sur ce mois si du coup...

J'aurais de toute façon le problème que sur ce mois... (vu que le mois prochains j'aurais que des fichier avec au moins 10 000...) et à nouveau quand j'arriverais à 100 000.... Mais j'ai le temps avant...

Reste à voir si on peu "déclarer" un bug....

Merci beaucoup pour l'idée ! ;)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Bug ? _arraysort()

#4

Message par jguinch »

Ce n'est pas un bug, c'est le comportement normal.
La fonction _FileListToArray te retourne des valeurs de type chaîne de caractères, pas des nombres.
_ArraySort tri les chaînes de caractères par ordre alphabétique. Le 1 est avant le 2 dans l'ordre alphabétique.

Si tu veux faire un tri numérique, il faudra transformer les chaînes en nombre, là ça marchera.

Code : Tout sélectionner

#Include <Array.au3>

Local $a = ["1", "10", "100", "12", "101", "200", "1000", "205", "22"]
_ArraySort($a) ; Tri par ordre alphabétique
_ArrayDisplay($a)


For $i = 0 To UBound($a) - 1
	$a[$i] = Number($a[$i]) ; On transforme les chaînes en nombres
Next

_ArraySort($a)
_ArrayDisplay($a)
Si les noms de fichier et/ou répertoires contients des caractères, il faudra s'y prendre autrement. Exemple ici : http://autoitscript.fr/forum/viewtopic. ... 847#p96557
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
SurPriseS
Niveau 6
Niveau 6
Messages : 291
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Bug ? _arraysort()

#5

Message par SurPriseS »

C'est ce qu'il me semblais en regardant le code dans array.au3 !

Merci pour l'info ;)

J'ai "triché" en rajoutant un 0 devant et ça fonctionne, c'est pas propre, mais le problème ne reviendras pas avant 100 000... sachant que j'ai mis plusieurs année à arrivé à 10 000...
C'est pas propre et c'est pas une vrai solution, mais tant pis ! si j'ai du temps je regarderais ça plus en détails !

Merci en tout cas !
Répondre