Differenze tra le versioni di "Ordinare i valori all'interno di una colonna"

Da Gambas-it.org - Wikipedia.
(Ordinare valori stringa)
 
(7 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
==Ordinare valori ''numerici''==
+
#REDIRECT [[Ordinare_i_valori_all'interno_di_una_colonna_di_una_GridView]]
 
 
Ipotizziamo di avere una ''GridView'' con 5 righe e 3 colonne. In una prima fase avremo nella prima colonna 5 numeri posti in modo "non ordinato" (li sceglieremo casualmente per ottenere l'esempio). Successivamente, in quella colonna tali valori saranno inseriti e mostrati in modo "ordinato" crescente.
 
 
 
 
 
'''Public''' Sub Form_Open()
 
 
Dim j, k As Byte
 
Dim a As New Byte[]
 
 
  With GridView1
 
    .Columns.Count = 3
 
    .Rows.Count = 5
 
  End With
 
 
For j = 0 To 4
 
  k = Rnd(1, 100)  <FONT color=#006400>' ''li individuo casualmente per creare il nostro esempio''</font>
 
  a.Add(k)        <FONT color=#006400>' ''li pongo in una variabile array''</font>
 
  Print a[j]      <FONT color=#006400>' ''li vedo in console come individuati in modo casuale''</font>
 
Next
 
 
 
<FONT color=#006400>' ''provvedo a ordinarli in modo crescente:''</font>
 
  a.Sort(gb.Ascent)
 
 
<FONT color=#006400>' ''li piazzo nella 1^ colonna così come finalmente ordinati:''</font>
 
  For j = 0 To 4
 
  GridView1[j, 0].Text = a[j]
 
  Next
 
 
'''End'''
 
 
 
 
 
==Ordinare valori ''stringa''==
 
Possiamo ordinare all'interno delle colonne, come più in generale all'interno di un array, anche valori ''stringa''.
 
 
 
Private a As New String[]
 
 
 
'''Public''' Sub Form_Open()
 
 
Dim j As Byte
 
 
<FONT color=#006400>' ''impostiamo 6 colonne e 3 righe alla GridView:''</font>
 
  With GridView1
 
    .Columns.Count = 6
 
    .Rows.Count = 3
 
  End With
 
 
 
<FONT color=#006400>' ''Imponiamo una stringa in ciascuna delle tre celle della 1^ colonna:''</font>
 
  For j = 0 to 2
 
    With GridView1[j, 0]
 
<FONT color=#006400>' '' coloriamo di verde la nostra colonna:''</font>
 
      .Background = Color.Green
 
<FONT color=#006400>' '' per "semplificare" l'esempio, mettiamo solo un carattere:''</font>
 
      .Text = Chr(80 - j)
 
    End With
 
 
<FONT color=#006400>' '' Inseriamo ciascun carattere in una variabile stringa array,
 
' ''perché "solo così", potremo utilizzare una funzione di Gambas
 
' ''per poter procedere al riordino dei caratteri.
 
' ''Prendiamo quei caratteri *dall'interno di ciascuna cella* della colonna:''</font>
 
    a.Add(GridView1[j, 0].Text)
 
  Next
 
 
'''End'''
 
 
 
'''Public''' Sub Button1_Click()
 
 
  Dim j As Byte
 
 
<FONT color=#006400>' ''Nonostante vi siano dei caratteri, è possibile effettuare anche
 
' ''con essi al loro riordino ! Riordino che avverrà nel rispetto
 
' ''della sequenza imposta nel protocollo ASCII. Provvediamo, dunque,
 
' ''ad ordinare qui i caratteri in modo "ascendente" (dalla A alla Z):''</font>
 
    a.Sort(gb.Ascent)
 
 
<FONT color=#006400>' ''Raggiungiamo così il nostro obiettivo finale di vedere "ordinati"
 
' ''all'interno della 1^ colonna:''</font>
 
    For j = 0 to 2
 
      GridView1[j, 0].Text = a[j]
 
    Next
 
 
'''End'''
 
 
 
 
 
 
 
Sarà semplice, come ora mostrato, se il primo carattere delle ''stringhe'' (qualunque lunghezza esse abbiano) è una lettera dell'alfabeto; ma se dinnanzi alle lettere c'è una <SPAN style="text-decoration:underline">quantità di caratteri numerici {[[#Note|1]]} diversa</span> da una stringa rispetto ad un'altra, il comportamento della funzione di Gambas, per effettuare il riordino, cambia.
 
Infatti, se per esempio facciamo compiere il riordino (<SPAN style="text-decoration:underline">ascendente</span>, come prima) di queste tre stringhe: "''55z''", "''111p''" e "''9a''", il riordino prenderà in considerazione il <SPAN style="text-decoration:underline">primo</span> carattere sulla base del protocollo ASCII. In tal caso avremo questo riordino:
 
<FONT color=#B55555>
 
<BR>111p
 
<BR>55z
 
<BR>9a</font>
 
e <SPAN style="text-decoration:underline>non</span> il contrario, come ci aspetteremmo !
 
 
 
Per ovviare a questo inconveniente, uno stratagemma può essere quello di far aggiungere degli <SPAN style="text-decoration:underline">zero</span> dinanzi al primo carattere, in maniera tale che ciascuna stringa iniziale, alla quale saranno stati aggiunti quegli zero, abbia così lo <SPAN style="text-decoration:underline">stesso numero di caratteri</span> delle altre stringhe presenti nell'array. Prendendo le stringhe di prima, insomma dovremo per esempio avere:
 
<BR>0111p
 
<BR>0055z
 
<BR>0009a
 
 
 
 
 
Facendo riferimento al codice sopra mostrato, faremo queste variazioni:
 
'''Public''' Sub Button1_Click()
 
 
Dim j As Byte
 
Dim s as string
 
 
  For j = 0 To 2
 
    s = String$(5 - Len(GridView1[j, 0].Text), "0") & GridView1[j, 0].Text
 
 
<FONT color=#006400>' ''Carichiamo quelle stringhe così modificate nella variabile array:''</font>
 
  a.Add(s)
 
 
  Next
 
 
 
e procedendo quindi al riordino mediante il predetto metodo ''variabile_Array.<FONT color=#B55555>Sort</font>'', riusciremo ad ottenere il riordino di quelle particolari stringhe; ed avremo la nuova disposizione degli elementi all'interno dell'array come segue:
 
<BR>0009a
 
<BR>0055z
 
<BR>0111p
 
 
 
Successivamente elimineremo gli zero che abbiamo ''strategicamente'' aggiunto:
 
 
 
For j = 0 To 2
 
  a[j] = Replace(a[j], "0", "")
 
Next
 
 
 
e ripiazziamo, così, nella 1<SUP>a</sup> colonna quelle tre stringhe, ri-ordinate e ripulite dagli zero che avevamo aggiunto:
 
 
 
For j = 0 To 2
 
  GridView1[j, 0].Text = a[j]
 
Next
 
 
'''End'''
 
 
 
cosìcché avremo alla fine il riordino delle stringhe iniziali, e raggiunto il nostro obiettivo:
 
<FONT color=#B55555>
 
<BR>9a
 
<BR>55z
 
<BR>111p</font>
 
 
 
=Note=
 
[1] Attenzione ! Stiamo qui parlando di ''caratteri'' che rappresentano numeri, e non di valori di tipo numerico (Byte, Float, Integer, Long).
 

Versione attuale delle 08:28, 29 ago 2020