StringInString -> 4 stellige Zahl

  • Hallo,

    habe eine Liste mit Namen in einem Array und möchte nun diejenigen herausfinden die eine 4 stellige (nur 4 stellig, nicht 3 und nicht 5)Zahl in ihrem Namen tragen.

    Leider fehlt mir die Idee einen String auf eine x stellige Zahl zu prüfen. (Die Zahl kann "irgendwo" im Namen sein...

    Kann mir da jemand helfen oder zumindest einen Gedankenanstoß geben?

    DANKE

  • Meinst du das so?

    Spoiler anzeigen
    [autoit]

    ConsoleWrite("test1234" & @TAB & StringRegExp("test1234", "\d{4}") & @CRLF)
    ConsoleWrite("test356 " & @TAB & StringRegExp("test356", "\d{4}") & @CRLF)
    ConsoleWrite("9999test" & @TAB & StringRegExp("9999test", "\d{4}") & @CRLF)

    [/autoit]


    StringRegExp($sString, "\d{4}") gibt 1 zurück wenn $sString eine Zahl mit vier Ziffern enthält, ansonsten ist der Rückgabewert 0.

  • Sowas kann man ganz gut mit regulären Ausdrücken regeln (in AutoIt über die Funktion StringRegexp).
    4 Zahlen zu finden ist damit recht einfach.
    Allerdings kommt es immer noch auf den konkreten Anwendungsfall an welche Sonderfälle mit beachtet werden müssen.
    Robust (aber nicht ganz trivial) ist folgende Variante:

    [autoit]

    $s_String = "Test21515dsdasd"
    If StringRegExp($s_String, "(?<!\d)\d{4}(?!\d)") Then
    MsgBox(0,"", "vierstellige Zahl im String gefunden")
    Else
    MsgBox(0,"", "vierstellige Zahl nicht gefunden.")
    EndIf

    [/autoit]


    Am besten ist jedoch du beschreibst mal den Anwendungsfall und gibst dazu ein paar Beispiele.

    name22
    Dein Pattern meldet auch true bei 5-stellige Zahlen (matcht nur die ersten 4 Ziffern der Zahl).

  • Es geht um einen einmaligen Fall, in dem bislang Dateien nicht strukturiert gespeichert wurden. Im Dateinamen wurde oft aber nicht immer die Kundennumer, die 4 stellig ist verwedet.

    Nun mache ich ein Script dass alle Deieinamen auf das vorhandensein eienr 4 stelligen Nummer prüft und diese dann in einen Ordner kopiertder als Ordnernamen diese 4 stellige Ziffer trägt.

    Beinhaltet der Dateinamen 3 oder 5 stellige Zahlen oder andere, handelt es sich um andere Zahlen...

    Ich denke die Vorschläge bringen mich weiter, da die Laufzeit nahezu egal ist.

    Vielen Dank vorerst.

  • Das heißt du willst nicht nur überprüfen ob eine vierstellige Nummer existiert sondern auch diese Nummer weiterverwenden?
    In dem Fall musst du das ganze noch bisschen anpassen:

    [autoit]

    $s_String = "Test2151dsdasd"
    $a_Ret = StringRegExp($s_String, "(?<!\d)(\d{4})(?!\d)", 3)
    If @error Then
    MsgBox(0,"", "vierstellige Zahl nicht gefunden.")
    Else
    MsgBox(0,"", "vierstellige Zahl im String gefunden: " & $a_Ret[0])
    EndIf

    [/autoit]

    Ich denke die Vorschläge bringen mich weiter, da die Laufzeit nahezu egal ist.

    Keine Angst - StringRegExp ist verdammt flott.