Page 1 sur 1

Comment trier une liste de chaîne a partir d'une position...

Publié : sam. 25/oct./2014 14:49
par Lord Nelson
Salut, comment je peut faire pour trier une liste de chaîne a partir d'une position précise de longueur précise ?
J'ai pas exemple ceci dans ma liste:
1 >>> 3909783
2 >>> 3909785
3 >>> 4416870
1 >>> 5481115
1 >>> 4416873
2 >>> 5481117
2 >>> 4416875
2 >>> 4416876
2 >>> 4416877
4 >>> 4416878
3 >>> 4416879
11 >>> 5527880
4 >>> 5527881
2 >>> 5527882
1 >>> 5527883
3 >>> 2109241
6 >>> 2109242
94 >>> 2109243
1 >>> 2109244
2 >>> 2109245
1 >>> 2109246
9 >>> 2109247
1 >>> 2109248
2 >>> 5397864
1 >>> 13224359
1 >>> 1135697
3 >>> 7047830
2 >>> 7047831
1 >>> 7047833
1 >>> 7047838
1 >>> 1160102
2 >>> 7902050
1 >>> 7902052
1 >>> 7902053
3 >>> 10134100
10 >>> 10134101
2 >>> 10134103
2 >>> 10134105
1 >>> 5936030
1 >>> 5936036
2 >>> 5936037
1 >>> 7058092
3 >>> 7058093
2 >>> 7058094
1 >>> 8821930
1 >>> 2187862
2 >>> 8821931
Je voudrait trier les éléments du plus petit au plus grand ou inversement en ne prenant en compte que les nombre avant ">>>"
Comment je peux faire ça svp ? :)

Re: Comment trier une liste de chaîne a partir d'une positio

Publié : sam. 25/oct./2014 14:52
par falsam
Lord Nelson a écrit :comment je peut faire pour trier une liste de chaîne
Avec une structure :)

Re: Comment trier une liste de chaîne a partir d'une positio

Publié : sam. 25/oct./2014 15:03
par Lord Nelson
Ah intéressant ça, merci Falsam :)
C'est bon j'ai vue l'aide, je vais pouvoir me débrouiller !
Encore merci !

Re: Comment trier une liste de chaîne a partir d'une positio

Publié : sam. 25/oct./2014 15:22
par falsam
Un bout de code au cas ou

Code : Tout sélectionner

Structure sData
  Var1.i ;Contient ce qui se trouve à gauche de >>>
  Var2.i ;Contient ce qui se trouve à droite de >>>
EndStructure

NewList Liste.SData()

;Ne sachant pas quel est le support de tes données
;Je crée un jeu de données que je strocke dans un array qui me servira de support
Procedure Split(Array Array.s(1), String.s, Delimiter.s)
  Protected File, i, j, Buffer.s
      
  j = CountString(String, Delimiter)  
  ReDim Array(j)
  For i=1 To j+1  
    Array(i-1) = StringField(String, i, Delimiter)
  Next
EndProcedure

Dim Buffer.s(0)
Split(Buffer(), "1 >>> 3909783,2 >>> 3909785,3 >>> 4416870,1 >>> 5481115,1 >>> 4416873,2 >>> 5481117,2 >>> 4416875,2 >>> 4416876,2 >>> 4416877,4 >>> 4416878,3 >>> 4416879,11 >>> 5527880", ",")

;C'est maintenant que ça commence : On place ces données dans une structure
For n=0 To ArraySize(Buffer())
  AddElement(Liste())
  Liste()\Var1 = Val(Trim(StringField(Buffer(n),1,">>>")))
  Liste()\Var2 = Val(Trim(StringField(Buffer(n),2,">>>")))
Next

;Vérification avant le tri
Debug ("# Liste avant le tri") 
ForEach Liste()
  Debug Str(Liste()\Var1) + " >>> " + Str(Liste()\Var2)
Next

;Effectuons le tri
SortStructuredList(Liste(), #PB_Sort_Ascending|#PB_Sort_NoCase, OffsetOf(Sdata\Var1), #PB_Integer)

;Vérification après le tri
Debug ("# Liste aprés le tri") 
ForEach Liste()
  Debug Str(Liste()\Var1) + " >>> " + Str(Liste()\Var2)
Next

Re: Comment trier une liste de chaîne a partir d'une positio

Publié : sam. 25/oct./2014 16:00
par Lord Nelson
Super merci Falsam :D