Überprüfen ob String \ und 5 Zahlen enthält

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Selbi.

    Überprüfen ob String \ und 5 Zahlen enthält

    Ich habe einen sehr langen Pfad, W:\Projekte_INH\2921_LX_Btrieve\BUGS\5_DASI_abgestellt\85800_bug_312\info.odt um genau zu sein, und von dort aus muss ich etwas herausfinden, nämlich ob dieser Pfad ein \ (Backslash) gefolgt mit einer 5-stelligen Zahl enthält (\85800 in diesem Beispiel). Das Problem ist, dass diese Zahl überall in dem Pfad sein kann (auch der Dateiname), und natürlich nicht immer die gleiche Zahl ist.

    Wie könnte man das effizient machen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Selbi“ ()

    Hallo Selbi,

    Splitte den Pfad in eine interne Tabelle. Wenn ich Dich richtig verstehe, ist der gesuchte Bestandteil dann der Eintrag auf en der eigentliche Dateiname folgt (ist auch der unterste Eintrag, wenn der Pfad sonst korrekt ist).

    Diesen kannst Du mittel LEN, MID und so weiter untersuchen ...

    Viel Spaß ;)

    VB.NET-Quellcode

    1. Dim Splitted() As String = Datei.Split("\")
    2. Dim IstFertig As Integer = 0
    3. For i = 0 To Splitted.GetUpperBound(0)
    4. If Splitted(i).Length >= 5 Then
    5. If IsNumeric(Splitted(i).Substring(0, 5)) Then
    6. IstFertig = 1
    7. Else
    8. If Not IstFertig = 1 Then
    9. IstFertig = 0
    10. End If
    11. End If
    12. End If
    13. Next

    Ist dies eine sinnvolle Lösung? Auf jeden Fall hat sich das Programm damit unglaublich (und unerträglich) verlangsamert, funktionieren tut es aber schonmal.
    Wie wäre es mit Regex ?

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. ...
    3. ' dateiName holen
    4. Dim dateiName As String = "c:\Programme\irgendwas\1234\info.odt"
    5. ' mit regex den String auf \Ziffernfolge durchsuchen
    6. Dim match As Match = Regex.Match(dateiName, "\\(\d+)" )
    7. ' Nur gültig wenn genau 1 Suchergebnis vorliegt
    8. If match.Groups.Count <> 2 Then
    9. MessageBox.Show("Houston, we have a problem")
    10. Else
    11. ' Nummer gefunden
    12. Trace.WriteLine(match.Groups(1))
    13. End If

    Edit: wenn es genau 5 Ziffern sein sollen, dann pico's Pattern verwenden, bin genauso Regex Laie. Für komplexe Pattern unbedingt bei Singu anfragen ;)

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

    Am sinnvollsten ist das mit Regex zu lösen ...

    Dummerweise bin ich kein Regex-Experte, aber sicher wird sich jemand finden ;)

    Geht, aber ob gut? ->

    VB.NET-Quellcode

    1. Dim r As New System.Text.RegularExpressions.Regex("\\[\d]{5}[^\d]")
    2. Debug.Print(r.Match("aaaaaa\12345bbbbb").ToString)
    3. Debug.Print(r.Match("aaaaaa\1234bbbbb").ToString)
    4. Debug.Print(r.Match("aaaaaa\123456bbbbb").ToString)

    VB.NET-Quellcode

    1. Dim IstFertig As Integer = 0
    2. Dim RegexSuche As New System.Text.RegularExpressions.Regex("\\[\d]{5}[^\d]")
    3. If RegexSuche.Match(Datei).ToString.Length > 5 Then
    4. IstFertig = 1
    5. Else
    6. IstFertig = 0
    7. End If

    Ein Traum wie das schnell das geht, tausend Dank. :thumbsup:
    Vielleicht beschreibst Du mal was Du damit möchtest, es gibt verschiedene Ansätze das Ergebnis der Regex-Prüfung weiter zu verwenden:
    - soll diese Zahl weiterverwendet werden ? Dann wäre es sinnvoll die Ziffernfolge wie oben mit Klammern in der Pattern zu kennzeichnen und Groups zu verwenden
    - was passiert wenn der Pfad mehr als 1 solche Folge aufweist ?

    In VB.Net mit Regular Expressions zu arbeiten ist nicht besonders schwer, nur die Suchpatterns sind gewöhnungsbedürftig ...
    Anhand von den Zahlen, ist abzulesen, ob die Dateien als "Fertig" markiert worden sind. Es handelt sich dabei um Dokumente, die Überprüft werden sollen (wenn ein Dokument fertig überprüft ist, wird es umbenannt mit einer 5-Stelligen Zahl). Das Programm soll in eine ListBox alle Dateien vom Typ .odt auflisten und davor jeweils "Fertig" oder "Nicht fertig" schreiben, je nachdem ob der Pfad eine Stelle mit 5 Zahlen enthält oder nicht. Das heißt mehr muss mit der Zahl nicht getan werden.
    Was den Pfad angeht, obwohl es unwahrscheinlich ist, können natürlich mehrere Teile von dem Pfad 5 Zahlen haben. In dem Fall soll die Datei aber auch als Fertig markiert werden.

    Vielleicht klärt dieses Bild einiges auf: