August 05, 2020, 21:02:41

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Filtern eines Stringbereiches zwischen zwei Zeichen

Begonnen von david4731, Juli 13, 2020, 12:28:35

⏪ vorheriges - nächstes ⏩

david4731

Hallo Forum,

ich habe Strings in denen irgendwann ein # gefolgt von 1-5 Ziffern vorkommen kann.
in etwa:
öjDNBV HNDFPOJWN HE8)$ #1847 gsjsbndj jebn jsks
Diesen Bereich möchte ich abfragen.
Vor und nach dem zu filternden Bereich können alle möglichen Zeichen (außer #) stehen. Auch die Länge ist immer unterschiedlich. Sollte  kein #xxx vorkommen soll der string unverändert übernommen werden.
Ich habe daran gedacht die instr Funktion zu verwenden um die Stelle des # zu identifizieren und in der Mid Funktion als start zu setzen. Wie kann ich aber den Stop definieren? das auf die Ziffern folgende Leerzeichen ist nie das erste und könnte das 3. aber auch das 20. sein.

hat jemand einen Hinweis?

grüße
David

ebs17

Juli 13, 2020, 13:24:36 #1 Letzte Bearbeitung: Juli 13, 2020, 13:31:42 von ebs17
ZitatWie kann ich aber den Stop definieren?
Nun, das gesuchte Leerzeichen wäre das erste nach der Raute. Du müsstest also Instr, Mid, Len & Co. etwas mehr verknüpfen und schachteln.

Deutlich eleganter und mächtiger kann man so etwas über reguläre Ausdrücke lösen: "Intelligente" Textanalyse

Zitatein # gefolgt von 1-5 Ziffern
' Muster für Suche
sPattern = "#\d{1, 5}"

Wenn Dein unübersichtlicher String aus einer Eigenverkettung kommt (unvollständige Datensätze per Abfrage filtern), hast Du etwas in der Abfolge falsch gemacht.
Mit freundlichem Glück Auf!

Eberhard

david4731

danke für dienen hinweis aber ich komme da nicht weiter.
ich stelle mir vor in das Abfragefeld die funktion : feldname: regexp([suchfeldname], "suchfilter") eigeben zu müssen
-
richtig?

habe ein neues VBA modul angelegt, die Bibliothek aktiviert und den code aus deiner beschreibung hineinkopiert:

Public Function fChangeText(sText As String) As String
    Dim regex As Object
    Set regex = CreateObject("Vbscript.Regexp")
    With regex

        .Pattern = "\D" ' löscht alles außer Ziffern

        '.Pattern = "[^0-9,]" ' löscht alles außer Ziffern und Komma
        '.Pattern = "[^a-zA-ZäöüßÄÖÜ]" ' löscht alles außer Buchstaben

        .Global = True ' Jedes Auftreten wird berücksichtigt
        fChangeText = .Replace(sText, "")
    End With
    Set regex = Nothing
End Function

Debug.Print fChangeText("Ich möchte nur die Ziffern aus 12-4.56/444.5 haben.")
-> "124564445"

der ist für mein Problem aber scheinbar nicht passend.

Um ehrlich zu sein wollte ich gar nicht so tief in das Thema einsteigen. ich wäre dankbar für eine etwas detailliertere Hilfe.

Grüße
David

ebs17

Zitatden code aus deiner beschreibung hineinkopiert
Spaßvogel. Da gibt es mehr als EINEN Code, vor allem auch Raum für eigene Überlegungen.

Zitathat jemand einen Hinweis?
Hinweis wird wohl unterschiedlich interpretiert. Ich brauche nicht extra zu betonen, dass ich ehrlich bin - man hört das zuweilen deutlich heraus. Die Bitte Hinweis nehme ich da wörtlich.
Mit freundlichem Glück Auf!

Eberhard