Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

Ordinare in modo numerico elementi listbox VB

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

Ordinare in modo numerico elementi listbox VB

Messaggioda KillerPenguin » gio apr 04, 2013 8:36 pm

salve, forse sarà una cavolata ma non ne sto proprio riuscendo a venire a capo. ho una listbox che contiene i nomi delle cartelle di alcuni backup tipo questa

Immagine

si può notare che il primo numero serve per ordinare le cartelle in basa alla data di creazione, la restante parte rappresenta la data e l'ora della creazione della stessa.
Ora, come si può vedere dall'immagine postata vorrei le items vengano ordinate in base al numero che si trova esternamente dalle parentesi. Si nota che l'ordinamento viene fatto, però vorrei che questo venga ordinato in maniera "umana" quindi :

1(cartella)
2(cartella)
3(cartella)
4(cartella)
5(cartella)
6(cartella)
7(cartella)
8(cartella)
9(cartella)
10(cartella)
11(cartella)
12(cartella)
13(cartella)

e non

1(cartella)
10(cartella)
11(cartella)
12(cartella)
13(cartella)
2(cartella)
3(cartella)
4(cartella)
5(cartella)
6(cartella)
7(cartella)
8(cartella)
9(cartella)

Si può fare?
www.TheKillerPenguin.Altervista.org
Avatar utente
KillerPenguin
Bronze Member
Bronze Member
 
Messaggi: 517
Iscritto il: lun feb 14, 2011 6:37 am

Re: Ordinare in modo numerico elementi listbox VB

Messaggioda M@ttia » ven apr 05, 2013 11:53 am

Anziché
Codice: Seleziona tutto
 1 2 3 4 5 6 7 8 9 10 11 12

usa
Codice: Seleziona tutto
 01 02 03 04 05 06 07 08 09 10 11 12

[^]

(N.B. se i numeri superassero il 100, cosa verificabile ogni volta, allora 001, 002, ecc.)




Ah, dimenticavo:
Questo comportamento avviene solo quando i dati vengono considerati come stringhe di testo; se invece li dichiari in modo da essere numeri (integer), l'ordinamento viene fatto come vuoi tu senza bisogno di zeri aggiuntivi).
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero

Re: Ordinare in modo numerico elementi listbox VB

Messaggioda KillerPenguin » ven apr 05, 2013 6:22 pm

M@ttia ha scritto:
(N.B. se i numeri superassero il 100, cosa verificabile ogni volta, allora 001, 002, ecc.)


Ti ringrazio per aver risposto [:)]
Sfortunatamente sono costretto a utilizzare stringhe e non numeri (integer)
ora ti spiego:
quando la cartella deve essere generata deve avere un nome, per dare il nome uso il codice 1 per definire il numero in base a quante cartelle ci sono all'interno della cartella; per definire la data uso il codice 2; poi con un terzo codice unisco le due stringhe. Come posso fare a trasformare il numero generato dal codice 1 ES: da 1 a 000001 o da 10 a 000010???
Codici

codice 1
Codice: Seleziona tutto
Dim counter = My.Computer.FileSystem.GetDirectories("C:\cartella_contenente_i_Backup")
            numero = CStr(counter.Count) + 1

codice 2
Codice: Seleziona tutto
tempo = Now.Date + Now.TimeOfDay
        tempo = tempo.Replace("/", "-")
        tempo = tempo.Replace(" ", "_")
www.TheKillerPenguin.Altervista.org
Avatar utente
KillerPenguin
Bronze Member
Bronze Member
 
Messaggi: 517
Iscritto il: lun feb 14, 2011 6:37 am

Re: Ordinare in modo numerico elementi listbox VB

Messaggioda KillerPenguin » ven apr 05, 2013 7:40 pm

Ho risolto in questo modo:
Codice: Seleziona tutto
dim numero as string
If Len(numero) = 1 Then
            numero = "000000" & numero
        ElseIf Len(numero) = 2 Then
            numero = "00000" & numero
        ElseIf Len(numero) = 3 Then
            numero = "0000" & numero
        ElseIf Len(numero) = 4 Then
            numero = "000" & numero
        ElseIf Len(numero) = 5 Then
            numero = "00" & numero
        ElseIf Len(numero) = 6 Then
            numero = "0" & numero
        Else
            MsgBox("Numero di backup massimo stabilito. Svuota i backup", MsgBoxStyle.Information, "Backup Massimo")
        End If
www.TheKillerPenguin.Altervista.org
Avatar utente
KillerPenguin
Bronze Member
Bronze Member
 
Messaggi: 517
Iscritto il: lun feb 14, 2011 6:37 am

Re: Ordinare in modo numerico elementi listbox VB

Messaggioda M@ttia » sab apr 06, 2013 1:30 pm

Sì, puoi farlo in quel modo, o con un ciclo FOR (più compatto).
O, ancora meglio (e più efficientemente), sfruttando una funzione già integrata in VB per fare proprio questo:
Codice: Seleziona tutto
myString = myString.PadLeft(7, "0"c)
Questa funzione aggiunge davanti a myString un numero di 0 tale da fare in modo che la sua lunghezza totale sia uguale a 7.



Nel tuo caso, quindi, con il Codice 1 fai
Codice: Seleziona tutto
...
numero = CStr(counter.Count) + 1
...


Questo sarà anche il numero massimo da raggiungere, supponiamo 174.
Ciò significa che tutti i numeri dovranno essere lunghi 3 cifre.
Codice: Seleziona tutto
Dim NumeroCifre = len(numero.ToString())


A questo punto, ogni numero in cui ti imbatti (che è già una stringa da quanto dici), lo modifichi con
Codice: Seleziona tutto
NumeroAttuale = NumeroAttuale.PadLeft(NumeroCifre, "0"c)
(nota che quelli che sono già da 3 cifre non li tocca affatto).

[^]
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising