Zahlen aus einem String filtern???

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Dodo.

    Zahlen aus einem String filtern???

    Hallo leute, ich suche eine möglichkeit zahlen aus einem String rausfiltern.

    hab hier zwei probleme:

    1) beispiel:

    dim str as string="Delta : 0.0001 sec."
    so jetzt will ich dass ich eine variable von typ double habe die nur 0,0001 drin hat.




    2) beispiel:

    dim str as string="00:00:00,0000;0,00;"
    dim str1 as string="00:00:00,0001;0,91;"
    hier will ich dass er mir das genze in zwei variablen zeigt: einmal integer mit 0 (beim zweiten 1) und eine double variable mit 0,0 (beim zweiten 0,91.
    die zahlen am anfang "00:00:00" können weggelassen werden...

    ist es irgend wie möglich? kann man nach bestimmten trennzeichen suchen und die zahl halt dan in eine variable reinpacken?

    vielen dank im vorraus :)
    hallo. mitlerweile habe ich das mit delta so gelöst:

    mein string: "Delta : 0.0001 sec."

    Quellcode

    1. Dim provider As NumberFormatInfo = New NumberFormatInfo()
    2. provider.NumberDecimalSeparator = "."
    3. provider.NumberGroupSeparator = ","
    4. Dim deltaFilter As New System.Text.RegularExpressions.Regex("[0-9\.]+")
    5. delta = Convert.ToDouble(deltaFilter.Match(meinSting).ToString, provider)


    hab zwar noch nicht ganz verstanden was das hier heist: Dim deltaFilter As New System.Text.RegularExpressions.Regex("[0-9\.]+")

    aber es funktioniert damit. scheinbar nehm ich da zahlen von 0-9. was das hier heist \. und der + dahinter weis ich nicht. wenn ich + auslasse, sieht er die zahlen nicht nach komma.

    kurz gesagt 0.0001 kommt rein und 0,0001 kommt als double wert wieder raus.

    was mich jetzt nur noch interessiert ist wie ich aus das hier:"01:02:03,0004;5,67;" -->> das hier mache: 5,67

    bis jetzt hab ich das so:

    Dim wertFilter As New System.Text.RegularExpressions.Regex("[-][0-9][,][0-9][0-9]|[0-9][,][0-9][0-9]")

    es ist mit einer oder bedienung drin. kann also vorkommen -0-9,0-90-9 oder 0-9,0-90-9. genau drei zeilen. aber wie ihr sieht hat er davor auch ein komma. zur zeit kommt bei mir 3,00 raus.

    MEINE FRAGE: wie kann ich ihm erzählen, dass er nach einem ";" suchen soll und erst da anfangen zu vergleichen?? bis jetzt wurde ich nicht fündig.

    vielen dank im vorraus
    ja tut mir leid das ^ war für den Post zuvor...(was soviel heißt wie alle zeichen außer...)um ab dem Semikolon zu beginnen, kannst du ja einfach mit IndexOf den Index auslesen und bei Split, Replace oder was auch immer erst von dort beginnen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    RegEx würde so aussehen

    01:02:03,0004;5,67;

    VB.NET-Quellcode

    1. Dim Pattern As String = "([0-9]+):([0-9]+):([0-9]+),([0-9]+);(?<wert>([0-9,]+);"


    Das + hinter den eckigen Klammern heißt es muss ein oder mehr Zeichen enthalten, in diesem Fall min. eine Zahl. Das was du haben willst deklarierst du mit einem Namen um es später heraus zu bekommen.
    Ich denke der Pattern müsste so stimmen, ist ausm Kopf geschrieben, aber du kannst hierdran sicher lernen, wie es in etwa aussehen muss.
    das hättest auch noch selbst hinbekommen können, Klammer auf benötigt auch wieder Klammer zu

    VB.NET-Quellcode

    1. Dim Pattern As String = "([0-9]+):([0-9]+):([0-9]+),([0-9]+);(?<wert>([0-9,]+));"

    was meinst du denn genau mit ab Semikolon?...
    eigt könntest du den String ja Splitten, also

    VB.NET-Quellcode

    1. Dim str As String = "00:00:00,0000;0,00;"
    2. Dim derWert As String = Split(str,";")(1)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    oh, vielen dank. scheint zu klappen.

    wenn ich jetzt das so mache:

    Quellcode

    1. Dim x As String = "00:00:00,0004;0,84;"
    2. Dim y As String = Split(x, ";")(1)


    dann habe ich in y nur noch "0,84" stehen. muss nur noch in double umwandeln. da brauch ich garnicht mehr dieses pattern.

    hm. so viel suche umsosnt...

    dieses splitern kannt ich bis jetzt nicht. was bedeutet eigenlich die 1 dahinter? und nimmt er inhalt zwischen den ";"? kurzgesagt kannst du bischen diese funktion erleutern?

    danke.
    Regex rox.
    Kann ich aber nicht ;)

    VB.NET-Quellcode

    1. Private Function Between(ByVal src As String, ByVal start As String, ByVal [end] As String) As String
    2. Dim istart As Integer = src.IndexOf(start, 0)
    3. If istart < 0 Then Return String.Empty
    4. Dim iend As Integer = src.IndexOf([end], istart + start.Length)
    5. If iend < 0 Then iend = src.Length
    6. Dim l As Integer = iend - istart - start.Length
    7. Return src.Substring(istart + start.Length, l)
    8. End Function


    test:

    VB.NET-Quellcode

    1. Debug.Print(Between("ABC;a;", ";", ";"))
    2. Debug.Print(Between("ABC;a", ";", ";"))
    3. Debug.Print(Between("ABC>>a;", ">>", ";"))
    Split splittet den String an einer bestimmten Zeichenkette oder Char in diesem fall ";" auf in einen Array, das (1) bedeutet, dass er dir den zweiten Eintrag aus der Liste(array) nehmen soll...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Waaas pico der ober guru? RegEx ist doch relativ einfach wenn man es ein paar mal angewendet hat. So richtig habe ich das auch erst gelernt als ich die Idee hatte ein Tutorial dazu zu machen. Bei solchen dingen ist RegEx noch relativ simpel, aber wenn die Pattern dann dahin gehen das es einige hundert Zeichen lang ist wirds übel ^^ das habe ich in PHP zur validierung von Usernamen, Mailadressen und sowas.