PDA

View Full Version : ListBox..come ordinarli numericamente ?


visodont
24-07-2004, 19:07
Visual Basic 6

In un ListBox si può fare un ordinamento alfanumerico ma non numerico.

Come fare per ordinare in ordine numerico crescente un LisBox di nomi contenenti prima un dato NUMERICO e poi il nome ?
Ordinati in base al NUMERO e non alfanumericamente.

Per Es:
1000 Zanasi Mario
2000 Aramini ugo
100 Pretti davide
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
COME E' POSSIBILE poi, ordinare i dati di un' array in ordine cresente o discendente ?

Con il vecchio Clipper5 bastava semplicemente un bel: Sort(Nome array), ascendente o discendente.
Possibile che con il Visual Basic così evoluto questo non si possa fare ?

Sono rimasto "incastrato" con questo problema, non riesco a venirne fuori !


Grazie,
Zeno.

a2000
25-07-2004, 18:47
purino

matpez
25-07-2004, 22:18
Originariamente inviato da visodont
Con il vecchio Clipper5 bastava semplicemente un bel: Sort(Nome array), ascendente o discendente.
Possibile che con il Visual Basic così evoluto questo non si possa fare ?

Bhe.. se tutto fosse già pronto allora nn ci dovrebbero nemmeno chiamare Programmatori, ma utilizzatori di funzioni :p

a2000
25-07-2004, 22:38
fuochino ... :D

matpez
25-07-2004, 23:17
Bhe, se vuoi ordinare sta listbox in maniera numerica è semplice, basta che gli ordine e siccome tutti hanno il numero, verranno ordinati in maniera numerica.

Basta che attivi il metodo SORT della listbox e ti le ordina in maniera alfabatica (cioè in pratica basandosi per il codice ascii) .... i numeri stanno prima dei caratteri alfabetici, per cui li ordina correttamente!!

Per l'ordinamento nn esiste in VB una funzione giù pronta.. dovresti usare i metodi di ordinamenti manuali :)

Vedi tu quale usare! ;)

visodont
27-07-2004, 20:13
Ho provato già, prima ma purtroppo il list box anche se alla sinistra della stringa c'è un numero non fa un ordinamento di tipo numerico ma alfabetivo.


Non sono un programmatore professionista , sono solamente un hobbista che è rimasto incastrato in quel problema e non risco a urdinare un' array numericamente come vorrei.


Grazie,
Visodont

visodont
27-07-2004, 20:15
Originariamente inviato da matpez
Bhe.. se tutto fosse già pronto allora nn ci dovrebbero nemmeno chiamare Programmatori, ma utilizzatori di funzioni :p


Però il CLipper era vecchio ma permetteva di fare una cosa simile. Questo è un progresso da gambero.

Visodont ( che è programmatore solamente per hobby )

matpez
27-07-2004, 20:21
Originariamente inviato da visodont
Ho provato già, prima ma purtroppo il list box anche se alla sinistra della stringa c'è un numero non fa un ordinamento di tipo numerico ma alfabetivo.


Non sono un programmatore professionista , sono solamente un hobbista che è rimasto incastrato in quel problema e non risco a urdinare un' array numericamente come vorrei.


Grazie,
Visodont

Sarà ma io ho fatto delle prove e il tuo esempio me lo ordina così:

100 Pretti davide
1000 Zanasi Mario
2000 Aramini ugo


Che ha di sbagliato?

visodont
28-07-2004, 10:31
Ho riprovato in questo momento e il risultato e il seguente :

120 Zanella.......
1500 Corgniali .....
1680 Quaresina .....
180 Arami. ..........

ecc.....

Come vedi l' ordinamento è errato. No ordina numericamente.

Non soprprio cosa fare.

Soche esiste un metodo per ordinare un' array, ma non lo conosco.

Visodont

matpez
28-07-2004, 10:54
Questo è un ordinamento manuale:


Dim nArray(10) As Integer
Dim nAux As Integer
Dim nI As Integer
Dim nJ As Integer


'array contiene valori dall'indice 1 a 10

'ordinamento bouble sort
For nI = 1 To 10 - 1
For nJ = 1 To 10 - 1
If nArray(nJ) > nArray(nJ + 1) Then
nAux = nArray(nJ)
nArray(nJ) = nArray(nJ + 1)
nArray(nJ + 1) = nAux
End If
Next
Next


Questo ordina dei numeri, devi adattarlo per il tuo progetto.

Se hai bisogno di una mano chiedi pure ;)

a2000
28-07-2004, 14:22
scusa fratello se te lo dico ma come ordinamento a bolla è fatto col cul@. :)

a2000
28-07-2004, 18:27
solo con questa versione non ottima, riduzione ad 1/5 (un quinto) del tempo di ordinamento ...


For i = 1 To II - 1
xmin = x(i): jmin = i
For j = i + 1 To II
If x(j) < xmin Then xmin = x(j): jmin = j
Next j
x(jmin) = x(i)
x(i) = xmin
Next i

matpez
28-07-2004, 23:37
Originariamente inviato da a2000
scusa fratello se te lo dico ma come ordinamento a bolla è fatto col cul@. :)

Si si lo so, ma siccome ero di fretta, avevo la tipa che mi rompeva il cazzo.. ho scritto quello che va + lento ma è il + corto :D

aaaah ste donne!! :cool:

a2000
28-07-2004, 23:47
ah, ho capito ... allora l'hai scritto col ca@zzo :D

a2000
28-07-2004, 23:47
comunque mi sembra corto uguale.

visodont
30-07-2004, 18:48
Grazie dei codici !

Mi metto subito all' opera.

Scusate se ogni tanto vi disturbo con richeste per voi elementari, ma visto che siete gentiline approfitto
Grazie ancora
Visodont

a2000
30-07-2004, 20:53
c'è un'altra soluzione che ti permette di utilizzare il sort embedded in VB: 4 righe.

interessa ?

a2000
30-07-2004, 21:00
visodont .... ma toglimi una curiosità ....

ma tra un post e l'altro ... quanti diecimila euri esentasse ti inglobi :D :confused:

thegood85
30-07-2004, 23:50
Domanda del cavolo, ma...
Io non conosco VB (cioè, l'ho usato 6 mesi a scuola, non ricordo più una mazza)

Se, invece di scrivere i numeri
1000
100
240
431

li scrivi così:

1000
0100
0240
0431

Non te li ordina a modo?

a2000
31-07-2004, 08:34
Originariamente inviato da a2000
c'è un'altra soluzione che ti permette di utilizzare il sort embedded in VB: 4 righe.

interessa ?

thegood85
31-07-2004, 10:51
Originariamente inviato da a2000
c'è un'altra soluzione che ti permette di utilizzare il sort embedded in VB: 4 righe.

interessa ?


Ma i tuoi messaggi sono sempre così criptici?

Ce la puoi passare questa tua soluzione?

visodont
31-07-2004, 16:51
Si mi interesserebbe,
se sei cosi gentile da darmi qualche dritta !

Grazie
Visodont

visodont
31-07-2004, 17:00
Caro a2000

tu scrivi : visodont .... ma toglimi una curiosità ....

ma tra un post e l'altro ... quanti diecimila euri esentasse ti inglobi ?

Beh, ho trovato il modo di estrarre soldi dalle tasche della gente in modo poco doloroso e mi ringraziano per questo.

Dal VB6 non ricavo un euro bucato ! E' solamente un hobby che mi è di qualche utilità anche nel mio lavoro.


Sono un addetto alla manutenzione di particolari impianti di triturazione, nel comparto alimentare, ma di esentasse purtroppo non se ne parla e allora visto che le devo pagare le mie manutenzioni sono ben retribuite.

Ciao,
Visodont

a2000
02-08-2004, 22:18
With Form1.ListBox1

For i = 0 To .ListCount - 1
.List(i) = Format$(Val(.List(i)), "00000") & Mid$(.List(i), InStr(.List(i), " "))
Next i

.Sort

For i = 0 To .ListCount - 1
.List(i) = Format$(Val(.List(i)), "#####") & Mid$(.List(i), InStr(.List(i), " "))
Next i
End With