Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sortiranje: slova i brojevi

[es] :: .NET :: .NET Desktop razvoj :: Sortiranje: slova i brojevi

[ Pregleda: 2370 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nem

Član broj: 302980
Poruke: 19
*.cpe.voysat.com.



Profil

icon Sortiranje: slova i brojevi14.01.2015. u 09:18 - pre 112 meseci
Pozdrav,
imam program u VB .NET za unos podataka koji radi sa SQL bazom. Učitavanje podataka vrši se na standardan način
Code:
 Dim SelectQry = "SELECT rtrim(id)[ID],rtrim(delovodnibroj)[Delovodni broj] from TABELA order by delovodnibroj desc"


Kolona 'delovodnibroj' u tabeli 'TABELA' sastoji se iz kombinaije slova i brojeva. Na primer ako u toj kolini ima: ABV-1, ABV2, ABV-2-1, ABV-3, ABV10, ABV-17, ABV-20, sortiraće ih ovako:
ABV-1
ABV-10
ABV-17
ABV-2
ABV-20
ABV-2-1
ABV-3

Ja bih želeo da sortira po redosledu, od najmanjeg prema najvećem ili obrnuto:
ABV-1
ABV-2
ABV-2-1
ABV-3
ABV-10
ABV-17
ABV-20

Da li neko ima ideju kao to može da se uradi?
 
Odgovor na temu

dusans
Stojanov Dušan
Pančevo

Član broj: 9551
Poruke: 1343
*.dynamic.sbb.rs.



+311 Profil

icon Re: Sortiranje: slova i brojevi14.01.2015. u 10:00 - pre 112 meseci
Ako podaci moraju da ostanu kakvi jesu, onda moraš da napraviš funkciju koja transformiše vrednost i po kojoj dalje radiš sortiranje.
U funkciji uradi split po '-' i uradi left padding sa '0' za drugi, treći, četvrti, ... segment, tako da na kraju dobiješ ovako nešto:
Code:

ABV-00001
ABV-00002
ABV-00002-00001
ABV-00003
ABV-00010
...
 
Odgovor na temu

Dusan Kondic
Programer
ZR "Parametar" Ljubovija
Ljubovija

Član broj: 49961
Poruke: 225
109.121.1.*

Sajt: www.drinacoding.com


+14 Profil

icon Re: Sortiranje: slova i brojevi14.01.2015. u 10:12 - pre 112 meseci
Pošto je ovo pitanje postavljeno u ovom, a ne u SQL odeljku, i pošto je aplikacija rađena u VB .NET-u, pretpostavljam da je potrebno VB .NET rešenje.
Moje rešenje podrazumeva da se iz naziva parsiranjem izdvoji broj potreban za sortiranje i upiše u novu kolonu. Ovo doduše podrazumeva i to da je struktura podataka uvek ovakva kakva je u primeru koji ste zadali.
Primer:
Code:


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'Kreiram DataTabelu
        Dim DataTable1 As DataTable = New DataTable()
        DataTable1.Columns.Add(New DataColumn("Id", Type.GetType("System.Int32")))
        DataTable1.Columns.Add(New DataColumn("DelovodniBroj", Type.GetType("System.String")))

        'Ručno popunjavam DataTabelu onako kako bih je dobio SQL upitom
        Dim dRow As DataRow
        dRow = DataTable1.NewRow()
        dRow(0) = 1
        dRow(1) = "ABV-1"
        DataTable1.Rows.Add(dRow)
        dRow = DataTable1.NewRow()
        dRow(0) = 2
        dRow(1) = "ABV-10"
        DataTable1.Rows.Add(dRow)
        dRow = DataTable1.NewRow()
        dRow(0) = 3
        dRow(1) = "ABV-17"
        DataTable1.Rows.Add(dRow)
        dRow = DataTable1.NewRow()
        dRow(0) = 4
        dRow(1) = "ABV-2"
        DataTable1.Rows.Add(dRow)
        dRow = DataTable1.NewRow()
        dRow(0) = 5
        dRow(1) = "ABV-20"
        DataTable1.Rows.Add(dRow)
        dRow = DataTable1.NewRow()
        dRow(0) = 6
        dRow(1) = "ABV-2-1"
        DataTable1.Rows.Add(dRow)
        dRow = DataTable1.NewRow()
        dRow(0) = 7
        dRow(1) = "ABV-3"
        DataTable1.Rows.Add(dRow)

        'DataTabeli dodajem kolonu po kojoj ćemo sortirati podatke
        DataTable1.Columns.Add(New DataColumn("RedBr", Type.GetType("System.Int32")))

        'Popunjavam kolonu po kojoj ćemo sortirati podatke parsiranjem
        Dim broj As String
        For i As Integer = 0 To DataTable1.Rows.Count - 1
            dRow = DataTable1.Rows(i)

            'U privremenu promenljivu odvajamo deo posle prvog znaka "-"
            broj = dRow("DelovodniBroj").ToString().Substring(dRow("DelovodniBroj").ToString().IndexOf("-") + 1)

            'Ako u privremenoj promenljivoj postoji još jedan znak "-" odsecamo taj deo
            If broj.Contains("-") Then
                broj = broj.Substring(0, broj.IndexOf("-"))
            End If

            'Broj koji smo dobili konvertujemo u ceo broj i upisujemo ga u polje po kome ćemo sortirati tabelu
            dRow("RedBr") = Convert.ToInt32(broj)
        Next

        'Sortiramo
        DataTable1.DefaultView.Sort = "RedBr"

        DataGridView1.DataSource = DataTable1.DefaultView
    End Sub

Drugi način može biti da se npr. traži prvi karakter koji je broj i, ako postoji, prvi naredni koji nije, pa da se uzima taj srednji deo i konvertuje u ceo broj.
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Sortiranje: slova i brojevi

[ Pregleda: 2370 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.