Jak sortować linijki w TextBoxie według liczb zawartych w tych liniach ?

0

Witam.
Mam linijki w TextBoxie coś jak:

Maniek - 10 GB
Borys 5,5 GB
Ola - 2 GB
Arek - 60,8 GB
Maniek77 - 11,2 GB

I chciałbym te linijki posortować ale nie alfabetycznie tylko wg. tej ilości "GB".
Mógłby ktoś mnie nakierować jak to zrobić ?

0

Trzeba by pewnie pobrać linie, wyciągnąć wyrażeniem regularnym te liczby, posortować, nadpisać.
Prościej gdybyś użył innej kontrolki, np listview, listbox, datagridview.

0

@kosmita90he - komponenty nie służą do przechowywania danych, a do ich wyświetlania; Więc te dane trzymaj gdzieś indziej, a w komponencie je tylko wyświetlaj; Dzięki temu nie będziesz musiał tych linijek parsować, a w prosty sposób odczytać i jedną informację (nazwę użytkownika, czy co to jest) i drugą (ilość GB);

A jak już koniecznie upierasz się, aby z komponentu zrobić kontener, to sprawdzaj znaki w linijce i jeśli natrafisz na pierwszy biały znak - wypakuj podciąg aż do litery G, na koniec trim i gotowe; Ewentualnie najpierw wywal wszystkie białe znaki, jeśli znak - przed liczbą to minus.

1

@kosmita90he pokazywałem Ci kiedyś (dość dawno chyba przy linkach do hostingów) jak używać własnej funkcji sortowania ucz się bo wiecznie żył nie będę (chyba że zaczniesz płacić za pomoc):

Option Explicit On

Imports System.Text.RegularExpressions

Public Class Form1

    Function GetValueFromLine(Line As String) As Double
        Dim value As Double = 0
        'to wyrażenie nie wiem czy jest dobrze o nie wiem dokładnie czy nazwy userów mogą mieć spacje na przykład byłoby źle w przypadku usera "magda 77"
        Dim regex As Regex = New Regex(" ([0-9,]+)")
        'Dim regex As Regex = New Regex("- ([0-9,]+)") 'jeżeli zawsze przed wartością jest myślnik i spacja to lepiej tak
        Dim match As Match = regex.Match(Line)
        If match.Success Then
            Double.TryParse(match.Groups(1).Value, value)
        End If
        Return value
    End Function

    Private Sub btnSort_Click(sender As Object, e As EventArgs) Handles btnSort.Click
        Dim userList = New List(Of String)
        userList.AddRange(TextBox1.Lines)
        TextBox1.Clear()

        userList.Sort(Function(userX As String, userY As String)
                          Dim valX, valY As Double
                          valX = GetValueFromLine(userX)
                          valY = GetValueFromLine(userY)
                          Return -valX.CompareTo(valY) 'usun minus aby zmienic kierunek sortowania
                      End Function)

        For Each line As String In userList
            TextBox1.AppendText(line & Environment.NewLine)
        Next
    End Sub
End Class

1 użytkowników online, w tym zalogowanych: 0, gości: 1