Bonjour MLD
C'est bien mais on peut faire plus simple avec les instructions de PB
Global maxtab=10
Structure Dob
prem.l
deux.l
EndStructure
Dim tabpos.Dob(maxtab)
For x=1 To maxtab
tabpos(x)\prem=Random(maxtab)
tabpos(x)\deux=Random(maxtab)
Next
Debug "*************** Tableau non trié **********************************"
For y=1 To maxtab
Debug Str(y)+" "+Str(tabpos(y)\prem)+" "+Str(tabpos(y)\deux)
Next
;
; SortStructuredArray(ArrayName(), Mode, OffsetDuChamp, Type [, Debut, Fin])
Debug "*************** TRI ascendant sur prem **********************************"
; sortarray
SortStructuredArray(tabpos(), #PB_Sort_Ascending , OffsetOf(Dob\prem), #PB_Sort_Long) ; tri ascendant sur prem
For y=1 To maxtab
Debug Str(y)+" "+Str(tabpos(y)\prem )+" "+Str(tabpos(y)\deux)
Next
Debug "*****************tri descendant sur deux ********************************"
SortStructuredArray(tabpos(), #PB_Sort_Descending , OffsetOf(Dob\deux), #PB_Sort_Long) ; tri descendant sur deux
For y=1 To maxtab
Debug Str(y)+" "+Str(tabpos(y)\prem )+" "+Str(tabpos(y)\deux)
Next
On peut aussi trier sur un tableau à 2 dimensions
#MAXT=10
#MAX2=3
Structure Dob
StructureUnion
prem.l[#MAX2]
EndStructureUnion
EndStructure
Dim tabpos.Dob(#MAXT)
Debug OffsetOf(dob\prem)
For x=1 To #MAXT
For y=0 To #MAX2-1
tabpos(x)\prem[y]=Random((#MAXT+100)*(y+1))
Next
Next
Debug "*************** Tableau non trié **********************************"
For y=1 To #MAXT
imp$=Str(y)+" "
For z=0 To #MAX2-1
imp$+Str(tabpos(y)\prem[z])+" "
Next
Debug imp$
Next
;
; ; SortStructuredArray(ArrayName(), Mode, OffsetDuChamp, Type [, Debut, Fin])
Debug "*************** TRI ascendant sur prem[0] indice 1 **********************************"
; sortarray
SortStructuredArray(tabpos(), #PB_Sort_Ascending , OffsetOf(Dob\prem), #PB_Sort_Long) ; tri ascendant sur prem
For y=1 To #MAXT
imp$=Str(y)+" "
For z=0 To #MAX2-1
imp$+Str(tabpos(y)\prem[z])+" "
Next
Debug imp$
Next
Debug "*****************tri descendant sur prem[1) indice 2 ********************************"
;
; ; SortStructuredArray(tabpos(), #PB_Sort_Descending , OffsetOf(Dob\deux), #PB_Sort_Long) ; tri descendant sur deux
SortStructuredArray(tabpos(), #PB_Sort_Descending , OffsetOf(Dob\prem)+4, #PB_Sort_Long) ; tri ascendant sur prem
For y=1 To #MAXT
imp$=Str(y)+" "
For z=0 To #MAX2-1
imp$+Str(tabpos(y)\prem[z])+" "
Next
Debug imp$
Next
Debug "*****************tri descendant sur prem[2) indice 3 ********************************"
;
; ; SortStructuredArray(tabpos(), #PB_Sort_Descending , OffsetOf(Dob\deux), #PB_Sort_Long) ; tri descendant sur deux
SortStructuredArray(tabpos(), #PB_Sort_Descending , OffsetOf(Dob\prem)+8, #PB_Sort_Long) ; tri ascendant sur prem
For y=1 To #MAXT
imp$=Str(y)+" "
For z=0 To #MAX2-1
imp$+Str(tabpos(y)\prem[z])+" "
Next
Debug imp$
Next
Ou encore avec une zone banalisée de tout type en structureunion
#MAXi=10
#MAXy=3
Structure comp
StructureUnion
VAC.C[8]
VAS.s{8} ;ou Vas{20}
VAB.b[8]
VAa.a[8]
VAu.U[4]
VAw.w[4]
VAl.l[2]
VAi.i[2]
VAF.f[2]
VAD.d
VAq.q
EndStructureUnion
IND1.l[#maxy]
indo.l
EndStructure
Dim tabm.comp(#MAXi)
mess$="Choisissez A ou D plus colonne <= "+Str(#MAXy)
debinp:
inp$=InputRequester("Choisissez A pour ascendant ou D pour descendant et la colonne de tri max="+Str(#MAXy),mess$,"A"+Str(#MAXy))
inp$=Trim(inp$)
otri$=Mid(inp$,1,1)
If UCase(otri$)="A" Or UCase(otri$)="D"
inp$=Mid(inp$,2,Len(inp$)-1)
Else
mess$="doit commencer par A ou D"
Goto debinp
EndIf
Ctri=Val(inp$)
If Ctri<1 Or Ctri>#maxy
mess$+"** Valeur > 0 et < "+Str(#MAXy)
Goto debinp
EndIf
Debug "*************** Tableau non trié **********************************"
For i=1 To #maxi
tabm(i)\ind1[0]=i
imp$=Str(i)+" "
For y=0 To #maxy-1
tabm(i)\IND1[y]=Random( (#maxi+1000)*(y+1))
imp$+Str(tabm(i)\IND1[y])+" "
Next
; ************** tri sur ind1[?] ******************
tabm(i)\VAq=tabm(i)\IND1[ctri-1] ; tabm(i)\va? zone banalisée pour le tri zone caractère de 8 octets ici mais on peut augmenter la valeur Vas{20}
tabm(i)\indo=i
Debug imp$+" I_="+Str(i)
Next
; sortarray
; SortStructuredArray(tabm(), #PB_Sort_Descending , OffsetOf(comp\Vaq), #PB_Sort_Quad ) ; tri ascendant sur prem
If otri$="A"
SortStructuredArray(tabm(), #PB_Sort_Ascending , OffsetOf(comp\Vaq), #PB_Sort_Quad ) ; tri ascendant sur prem
mes$=" Ascendant "
Else
SortStructuredArray(tabm(), #PB_Sort_Descending , OffsetOf(comp\Vaq), #PB_Sort_Quad ) ; tri ascendant sur prem
mes$=" Descendant "
EndIf
Debug "*************** TRI " +mes$+ " sur Colonne "+ inp$ +" **********************************"
For l=1 To #MAXi
imp$=Str(l)+" "
For c=0 To #MAXy-1
imp$+Str(tabm(l)\ind1[c])+" "
Next
Debug imp$+" I="+Str(tabm(l)\indo)
Next
A+