Io utilizzo array di tipo variant, semplicemente allo scopo di evitarmi ogni volta la conversione di dati numerici, come date di calendario, valori float e valori integer in caratteri stringa da riconvertire ogni volta che devo utilizzarli nella loro natura originaria.
Una volta utilizzavo arry di tipo stringa, sobbarcandomi l'onere non indifferente di convertire e riconvertire ogni volta a seconda dell'uso che ne dovevo fare. Poi ho incontrato le variabili di tipo variant, ivi compresi gli array; ho capito che utilizzando array di detto tipo, potevo risparmiarmi le operazioni di conversione e riconversione. Operando così mi trovo benissimo. Non ho mai considerato, prima d'ora, perchè fino ad oggi non ne ho avuto bisogno, l'eventualità di richiamare il modulo
Sort. Ritengo, perchè l'ho potuto mettere in pratica in quest'occasione che l'ordinamento degli elementi di una tabella(array) bidimensionale di tipo variant non altera assolutamente l'esito dell'ordinamento stesso, perchè le chiavi di ordinamento sono contenute sempre nelle celle delle medesime colonne, dove i valori hanno caratteristiche di tipo di dati sempre omogeneo. Allora, visto anche che Gambas non è in grado di gestire strutture di contenuto misto, mi sono deciso a svolgere l'ordinamento con istruzioni come quelle che ho messo in opera oggi e che, per chiarezza verso chi voglia conoscere più da vicino il mio criterio di impiego. riporto qui sotto:
bSWCmmb = True
While bSWCmb
bSWCmb = False
For i = 0 To iTotAnomVec - 2
If vTaBila[i, 14] > vTaBila[i + 1, 14] Then ' vTaBila[i, 14] = VoCoContrPart
For ii = 0 To 14
Swap vTaBila[i, ii], vTaBila[i + 1, ii]
Next
bSWCmmb = True
Else
If vTaBila[i, 14] = vTaBila[i + 1, 14] ' vTaBila[i, 14] = VoCoContrPart
If vTaBila[i, 2] > vTaBila[i + 1, 2] ' vTaBila[i, 2] = Data contabile
For ii = 0 To 14
Swap vTaBila[i, ii], vTaBila[i + 1, ii]
Next
bSWCmmb = True
Else
If vTaBila[i, 2] > vTaBila[i + 1, 2] ' vTaBila[i, 2] = Data contabile
If vTaBila[i, 13] > vTaBila[i + 1, 13] ' vTaBila[i, 13] = IdRecContrPart
For ii = 0 To 14
Swap vTaBila[i, ii], vTaBila[i + 1, ii]
Next
bSWCmmb = True
Endif
Endif
Endif
Endif
Next
Wend
L'ordinamento tiene conto di tre chiavi posizionate in colonne diverse e non contigue. Il ciclo ripetitivo di ordinamento è gestito dalla variabile booleana
bSWCmb che viene posta a
TRUE ogni volta che si scambiano di posto una riga della tabella con la successiva. Ad ogni nuovo ciclo di ordinamento la variabile
bSWCmb viene posta a
FALSE. Il ciclo termina solamente quando eseguiti tutti i controlli sulle chiavi di ordinamento di una riga e di quella successiva terminano senza effettuare scambi. A tal punto la tabella è sicuramente ordinata per tutte e tre le chiavi di ordinamento interessate e la variabile
bSWCmb resta settata a
FALSE . Ciò permette il riconoscimento di fine ciclo While ... Wend ed il programma può proseguire il suo percorso con le istruzioni successive.