Zahlen Filtern

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Zahlen Filtern

    Hallo zusammen,
    Ich erhalte folgende werte von einem Server zurück:
    447892 K total memory
    182020 K used memory
    56992 K active memory
    108456 K inactive memory
    265872 K free memory
    27720 K buffer memory
    125580 K swap cache
    102396 K total swap

    Nun würde ich gerne
    total memory in einem string haben (Nur die Zahl:447892)
    used memory in einem string haben (Nur die Zahl:182020)
    Jedoch Varieren diese Zahlen :)
    und dann noch die % errechne (dies ist einfach)

    Jeodch weiss ich nicht wie ich diese 2 angaben filern kann :s
    So oder wie?

    VB.NET-Quellcode

    1. Dim String_Vom_Server As String = "447892 K total memory" 'z.B für die Ersten beiden, weiter muss du selber herausfinden. Ist Ganz Simple.
    2. Dim string_vom_server_ As String = "182020 K used memory"
    3. Dim i__ As Integer = string_vom_server_.Split("K")(0)
    4. Dim i As Integer = String_Vom_Server.Split("K")(0)
    5. Dim i_ As Integer = 100 / i * i__
    6. MsgBox(i_ & "%")


    //Edit, habe das mit dem % nicht mehr gesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „XinSho“ ()

    Hmm Für die ersten beiden?
    Die sache ist die, das die liste insgesammt ankommt nicht jeder einzeln...

    Das ist ein string:
    447892 K total memory182020 K used memory56992 K active memory108456 K inactive memory265872 K free memory27720 K buffer memory125580 K swap cache102396 K total swap
    Wenn ich dies nun mit einfüge dann:
    Ein Ausnahmefehler des Typs "System.InvalidCastException" ist in Microsoft.VisualBasic.dll aufgetreten.

    Zusätzliche Informationen: Ungültige Konvertierung von der Zeichenfolge in Typ Integer.

    Ich poste mal den ganzen code
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Dim temp As String
    4. 'Create the objects needed to make the connection
    5. Dim connInfo As New Renci.SshNet.PasswordConnectionInfo("192.168.321.90", "root", "pw")
    6. Dim sshClient As New Renci.SshNet.SshClient(connInfo)
    7. 'Need to hold the command
    8. Dim cmd As Renci.SshNet.SshCommand
    9. Using sshClient
    10. 'connect to the server
    11. sshClient.Connect()
    12. 'Run the command and put the results into the cmd object. In this case
    13. 'I am just running a directory list
    14. cmd = sshClient.RunCommand("/opt/vc/bin/vcgencmd measure_temp | tr -d ""temp="" | tr -d ""'C""")
    15. lblResult.Text = cmd.Result
    16. cmd = sshClient.RunCommand("/opt/vc/bin/vcgencmd measure_volts | tr -d ""volt="" | tr -d ""V""")
    17. lbl_volt.Text = cmd.Result
    18. cmd = sshClient.RunCommand("cat /proc/version |cut -d "" "" -f 3")
    19. lbl_system.Text = cmd.Result
    20. cmd = sshClient.RunCommand("df -P | grep rootfs | tr -s "" "" "" "" | cut -d "" "" -f 2")
    21. lbl_speicher_geamt.Text = Math.Round(cmd.Result / 1024 / 1024, 2)
    22. cmd = sshClient.RunCommand("df -P | grep rootfs | tr -s "" "" "" "" | cut -d "" "" -f 3")
    23. lbl_speicher_belegt.Text = Math.Round(cmd.Result / 1024 / 1024, 2)
    24. cmd = sshClient.RunCommand("df -P | grep rootfs | tr -s "" "" "" "" | cut -d "" "" -f 5")
    25. lbl_speicher_belegt_prozent.Text = cmd.Result
    26. cmd = sshClient.RunCommand("vmstat -s")
    27. Dim string_vom_server As String = cmd.Result
    28. Dim i As Integer = string_vom_server.Split(" K total memory")(0) 'hier z.B ist der werd 447892
    29. End Using
    30. End Sub
    31. End Class


    der werd zum auswerten:

    447892 K total memory
    184648 K used memory
    57600 K active memory
    110132 K inactive memory
    263244 K free memory
    29392 K buffer memory
    125588 K swap cache
    102396 K total swap
    0 K used swap
    102396 K free swap
    16696 non-nice user cpu ticks
    0 nice user cpu ticks
    9416 system cpu ticks
    4687733 idle cpu ticks
    3186 IO-wait cpu ticks
    109 IRQ cpu ticks
    287 softirq cpu ticks
    0 stolen cpu ticks
    107633 pages paged in
    109596 pages paged out
    0 pages swapped in
    0 pages swapped out
    Hallo,

    schnibli schrieb:

    Zusätzliche Informationen: Ungültige Konvertierung von der Zeichenfolge in Typ Integer.


    gewöhn dir mal an mit

    VB.NET-Quellcode

    1. Option Strict On
    zu programmieren, dann kommen solche Fehler nicht mehr vor.

    Und hier mal nen Code wie man das lösen könnte:

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Text.RegularExpressions
    3. Public Class Form1
    4. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    5. Dim s As String = "447892 K total memory" + vbNewLine + " 184648 K used memory57600 K active memory"
    6. s = s.Replace(vbNewLine, "")
    7. Dim IpRegExTotal As New Regex("(?<string>(.*)) K total memory*")
    8. Dim TotalMem As Integer = Convert.ToInt32(IpRegExTotal.Match(s).Groups("string").ToString.Trim)
    9. Dim IpRegExUsed As New Regex("K total memory (?<string>(.*)) K used memory*")
    10. Dim UsedMem As Integer = Convert.ToInt32(IpRegExUsed.Match(s).Groups("string").ToString.Trim)
    11. MessageBox.Show(TotalMem & vbNewLine & UsedMem)
    12. End Sub
    13. End Class


    Tim
    Wieso Regex wenn wir genau wissen wie der String aufgebaut ist und wo sich die gesuchten Komponenten befinden?

    VB.NET-Quellcode

    1. Dim s = [DeinServerString].Split(" "c)
    2. Dim totalMemory As Integer = Integer.Parse(s(0))
    3. Dim usedMemory As Integer = Integer.Parse(s(3).SubString(6, s(3).Length - 6))

    Und wenn das Skript auch mal Fehlermeldungen zurückgibt einfach mit TryParse arbeiten.

    Rinecamo schrieb:

    Wieso Regex wenn wir genau wissen wie der String aufgebaut ist und wo sich die gesuchten Komponenten befinden?
    VB.NET-Quellcode

    Dim s = [DeinServerString].Split(" "c)
    Dim totalMemory As Integer = Integer.Parse(s(0))
    Dim usedMemory As Integer = Integer.Parse(s(3).SubString(6, s(3).Length - 6))

    Und wenn das Skript auch mal Fehlermeldungen zurückgibt einfach mit TryParse arbeiten.


    Klar kann man das so machen, aber da must du trozdem Zeilenumbrüche durch Leerzeichen ersetzten
    TIm
    Also bei Regex kommt folgender Fehler:

    Ein Ausnahmefehler des Typs "System.FormatException" ist in mscorlib.dll aufgetreten.

    Zusätzliche Informationen: Die Eingabezeichenfolge hat das falsche Format.

    VB.NET-Quellcode

    1. Dim s As String = cmd.Result
    2. s = s.Replace(vbNewLine, "")
    3. Dim IpRegExTotal As New Regex("(?<string>(.*)) K total memory*")
    4. Dim TotalMem As Integer = Convert.ToInt32(IpRegExTotal.Match(s).Groups("string").ToString.Trim)
    5. Dim IpRegExUsed As New Regex("K total memory (?<string>(.*)) K used memory*")
    6. Dim UsedMem As Integer = Convert.ToInt32(IpRegExUsed.Match(s).Groups("string").ToString.Trim)'<<------
    7. MessageBox.Show(TotalMem & vbNewLine & UsedMem)



    Und bei regex:
    Ein Ausnahmefehler des Typs "System.FormatException" ist in mscorlib.dll aufgetreten.

    Zusätzliche Informationen: Die Eingabezeichenfolge hat das falsche Format.

    VB.NET-Quellcode

    1. Dim s = cmd.Result.Split(" "c)
    2. Dim totalMemory As Integer = Integer.Parse(s(0))'<<-----
    3. Dim usedMemory As Integer = Integer.Parse(s(3).SubString(6, s(3).Length - 6))
    @schnibli Du willst zuviel auf einmal.
    Stelle zuerst sicher, dass sich Dein Text in einem String-Array befindet, also Split(vbCr).
    Dann kannst Du Dir mit For Each alle Zeilen einzeln vornehmen und am Leerzeichen splitten.
    Wenn die Reihenfolge und Vollständigkeit gewährleistet ist, kannst Du die Zeilen 1 bis 11 (Nummern geschossen) nach Schema A behandeln, die Zeilen 12 bis 14 nach Schema B und die anderen Zeilen wie auch immer.
    Setz einen Haltepunkt auf das innere Split und sieh Dir an, was da rauskommt.
    Regex brauchst Du da nicht
    und

    schnibli schrieb:

    VB.NET-Quellcode

    1. Dim usedMemory As Integer = Integer.Parse(s(3).SubString(6, s(3).Length - 6))
    ist Grütze.
    Wie willst Du einen Fehler in dieser Zeile finden, wenn Du diese Zeile nicht mal verstehst?
    Mach da mehree Anweisungen draus.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!