Nicht nummerische aus string entfernen

  • Wie kann man aus einem string alles nicht nummerische entfernen?

    Beispiel:

    "A;1235-46275;Schrauben metrisch;Lager XY"

    sollte ergeben

    "123546275"

    • Offizieller Beitrag

    Falls du kein include möchtest, ein paar Schritte mehr, geht aber auch:

    [autoit]

    $string="abc,+12-tzr563Q><?9" ;num=125639
    $num=""
    $len=StringLen($string)
    For $i=1 To $len
    $pos=StringMid($string,$i,1)
    If StringIsDigit($pos) Then $num=$num&$pos
    Next
    MsgBox(0,"numerisch:",$num)

    [/autoit]
  • Ja diese Version ohne include gefällt mir. Habe es so ähnlich gemacht, dachte aber es geht mit einer eingebauten Funktion noch eleganter.

    • Offizieller Beitrag

    Wenn du das mehr als einmal verwendest, kannst du es auch als eigene Funktion schreiben. Dann hast du natürlich auch nur noch einen Befehl zum Aufruf:

    Spoiler anzeigen
    [autoit]

    $string="abc,+12-tzr563Q><?9" ;num=125639
    MsgBox(0,"numerisch:",_StringNumExtract($string))

    [/autoit] [autoit][/autoit] [autoit]

    Func _StringNumExtract($fullstring)
    $num=""
    $len=StringLen($fullstring)
    For $i=1 To $len
    $pos=StringMid($fullstring,$i,1)
    If StringIsDigit($pos) Then $num=$num&$pos
    Next
    If $num <>"" Then
    Return $num
    Else
    Return -1 ; String enthält keine numerischen Elemente
    EndIf
    EndFunc

    [/autoit]

    Edit:
    Ich hab mal die Funktion noch erweitert. Sie gibt nun Status (numerisch enthalten oder nicht), numerischen und nichtnumerischen Stringteil in ein Array aus:

    Spoiler anzeigen
    [autoit]

    $string= "abc,+12-tzr563Q><?9" ;num=125639
    $zahl= _StringNumExtract($string)
    MsgBox(0,"","numerisch: "&$zahl[1]& @LF &"nichtnumerisch: "&$zahl[2])

    [/autoit] [autoit][/autoit] [autoit]

    Func _StringNumExtract($fullstring)
    Dim $array[3]
    $num=""
    $nonum=""
    $len=StringLen($fullstring)
    For $i=1 To $len
    $pos=StringMid($fullstring,$i,1)
    If StringIsDigit($pos) Then
    $num=$num&$pos
    Else
    $nonum=$nonum&$pos
    EndIf
    Next
    If $num <>"" Then
    $array[1]= $num ; alle numerischen Elemente
    $array[0]= 0 ; numerische Elemente enthalten
    Else
    $array[0]= -1 ; String enthält keine numerischen Elemente
    EndIf
    $array[2]= $nonum ; alle nichtnumerischen Elemente
    Return $array ; Rückgabe Array [0] enthält Status 0 od. -1; [1] enthält num. Teil; [2] enthält nichtnum. Teil
    EndFunc

    [/autoit]