Page 1 sur 1

[R] Trier un tablau 2D sur plusieurs colonnes

Posté : lun. 18 oct. 2010 17:32
par IceMaKeR
Bonjour à tous,

Alors, j'ai recherché sur le forum et j'ai pas réussi a trouver comment je peux trier un tableau 2D sur une colonne puis sur une seconde j'ai regardé la fonction _Array2D_Sort mais je vois pas comment l'utiliser!
Je voudrais savoir si c'est bien cette fonction que je dois utiliser ou en faire une.

Merci d'avance.

Re: [..] Trier un tablau 2D sur plusieurs colonnes

Posté : mar. 19 oct. 2010 13:12
par IceMaKeR
Je comprends mieux pourquoi je galère!
Apparemment personne n'a réussi a le faire?
Personne n'aurait même pas une piste?!

Re: [..] Trier un tablau 2D sur plusieurs colonnes

Posté : mar. 19 oct. 2010 23:42
par Tlem
Pouvez-vous nous dire d'où vient cette fonction _Array2D_Sort, car elle n'est pas en standard dans AutoIt. :roll:

Edit : Trouvé ici => http://www.autoitscript.com/forum/index ... 0&p=577186

Re: [..] Trier un tablau 2D sur plusieurs colonnes

Posté : mer. 20 oct. 2010 00:28
par Tlem
Après avoir jeté un coup d'œil :

1) Modifiez le fichier Array2D.au3 afin de remplacer tous les appels à la fonction _StringSplit par la fonction StringSplit. Sinon cela ne fonctionne pas dans la dernière version de AutoIt.

2) pour utiliser la fonction :

Code : Tout sélectionner

_Array2D_Sort($avArray, $iDescending, $iStart, $iEnd, $iSubItem, $iDim, $iSynchronize)
$avArray représente le tableau à filtrer. Ce tableau sera mis à jour après le filtrage.
$iDescending dont la valeur par défaut est 0 permet de choisir l'ordre croissant ou décroissant. 0 = Croissant, 1 = Décroissant.
$iStart dont la valeur par défaut est 0 permet de choisir l'élément de début du tri. Vous pouvez vouloir trier une colonne à partir de 2ieme élément. ;)
$iEnd dont la valeur par défaut est -1 permet de choisir l'élément de fin pour le tri.
$iSubItem dont la valeur par défaut est 0 permet de choisir la colonne à trier.
$iDim dont la valeur par défaut est 1 permet de choisir le tri sur la dimension 1 ou 2 (j'avoue ne pas comprendre ce paramètre, mais comme je suis trés fatigué, c'est peut être normal ...).
$iSynchronize dont la valeur par défaut est 1 permet de trier l'ensemble du tableau, sinon seul $iSubItem est pris en considération. Cela signifie que pour un tableau, vous allez par exemple trier la première colonne par ordre croissant, mais dans ce cas les valeurs des autres colonnes suivrons (le tri est fait par ligne).

Re: [..] Trier un tablau 2D sur plusieurs colonnes

Posté : mer. 20 oct. 2010 10:20
par IceMaKeR
Merci TLEM,

En ce qui concerne le _StringSplit je l'avais déjà modifié.

Bon je vais tenter de faire une fonction pour mon soucis.
Je la posterais ici après.

Re: [..] Trier un tablau 2D sur plusieurs colonnes

Posté : mer. 20 oct. 2010 13:46
par Tlem
Vous n'avez pas besoin de fonction, en considérant votre tableau comme un tableau à deux colonnes dont vous voulez trier la colonne 1 (index 0) puis la colonne 2 (index 1), ce simple bout de code suffit :

Code : Tout sélectionner

_Array2D_Sort($avArray, Default, Default, Default, 0, Default, 0)
_Array2D_Sort($avArray, Default, Default, Default, 1, Default, 0)
Évidement, $avArray doit correspondre au tableau à trier.

Re: [..] Trier un tablau 2D sur plusieurs colonnes

Posté : mer. 20 oct. 2010 15:00
par IceMaKeR
Merci encore, mais le soucis c'est que les lignes ne doivent surtout pas être altérées je m'explique :

J'ai ceci :

0x42 Item A Groupe A
0x5A Item B Groupe B
0x00 Item E Groupe C
0x59 Item A Groupe C
0x27 Item E Groupe A
0x61 Item E Groupe B
0x5E Item A Groupe C
0x00 Item E Groupe A
0x00 Item C Groupe B
0x2B Item B Groupe A
0x29 Item A Groupe A
0x5F Item E Groupe B
0x1E Item A Groupe B
0x1F Item E Groupe C
0x20 Item B Groupe B
0x21 Item A Groupe B
0x5D Item E Groupe C

Je dois obtenir ça :

0x42 Item A Groupe A
0x29 Item A Groupe A
0x20 Item B Groupe A
0x5A Item E Groupe A
0x61 Item E Groupe A
0x00 Item A Groupe B
0x2B Item A Groupe B
0x1E Item B Groupe B
0x5F Item B Groupe B
0x00 Item C Groupe B
0x1F Item E Groupe B
0x5D Item E Groupe B
0x21 Item A Groupe C
0x27 Item A Groupe C
0x00 Item E Groupe C
0x59 Item E Groupe C
0x5E Item E Groupe C

Chaque ligne correspond a une option unique je ne dois donc pas perdre les infos de chaque ligne.
ça correspond a l'option tri multi criteres de excel.

Et là je me dis je me suis mal exprimé au départ !!!
Désolé!

Re: [R] Trier un tablau 2D sur plusieurs colonnes

Posté : mer. 20 oct. 2010 15:40
par IceMaKeR
J'ai trouvé!!!
Sur le site Anglais : http://www.autoitscript.com/forum/index ... ntry705519

Cette fonction permet de faire du tri multi colonnes.
► Afficher le texte

Re: [R] Trier un tablau 2D sur plusieurs colonnes

Posté : mer. 20 oct. 2010 15:48
par Tlem
Bien vu. Je venais de faire pas mal de tests avec _Array2D_Sort(), mais sans pouvoir trier sur plusieurs colonnes. :cry:

Merci pour votre partage de solution.

Re: [R] Trier un tablau 2D sur plusieurs colonnes

Posté : ven. 22 oct. 2010 11:17
par IceMaKeR
Normal c'est un forum d'entraide après-tout...