2009-04-02 6 views
1

Ich habe eine Zeichenfolge mit einer Reihe von Mehr-Buchstaben-Codes drin und ich würde es nach diesen Codes analysieren. Ich bin mir nicht sicher, wie ich dafür sorgen kann, dass mehr als ein Zeichen angezeigt wird, um festzustellen, ob es Teil eines Codes ist.VBA Zeichenfolge in Tokens zerlegen

Meine String sieht wie folgt aus:

BBCTEEBOBBB

und ich möchte diese Instanzen parsen:

E BB CT BOB

So sollte das Ergebnis ausgegeben werden (oder ein Array), das wie folgt aussieht:

BB CT E E BOB BB

+0

Wenn Sie VBA sagen, auf welches Produkt und welche Version zielen Sie? (VB6, Access 2007, Excel 2003 usw.)? – JohnFx

+0

Excel 2007 insbesondere ... – Caveatrob

+0

Ist es möglich, dass einige Codes Teilmengen von anderen sind. Das heißt, kann es einen B-Code und einen BB-Code geben? Ist es auch möglich, dass die Sourc-Zeichenfolge alles enthält, das NICHT zu den angegebenen Codes gehört? – JohnFx

Antwort

5

ich reguläre Ausdrücke verwenden würde. In Werkzeuge | Referenzen, fügen Sie die höchste Version der Microsoft VBScript Regular Expressions-Bibliothek auf Ihrem PC (5.5 auf meiner). Dann kann man Code wie die folgenden verwendet werden:

Sub main() 
    Dim x, m 
    Set x = myparser("BBCTEEBOBBB") 
    For Each m In x 
    Debug.Print m.Value 
    Next 
End Sub 

Function myparser(string_to_parse) 
    Dim splitter As New RegExp 
    splitter.Pattern = "E|BB|CT|BOB" 
    splitter.Global = True 
    Set myparser = splitter.Execute(string_to_parse) 
End Function 

myparser Die Funktion erzeugt ein MatchCollection Objekt, das wie in den main Subroutine besichtigt werden kann. Die Ausgabe ist eine Liste aller gefundenen Übereinstimmungen in der Eingabezeichenfolge. Sie sollten in der Lage sein, dies einfach zu konvertieren, um eine Array- oder durch Leerzeichen getrennte Zeichenfolge zu generieren.

+0

Ordentlich. Ich war mir der eingebauten regexp-Bibliothek nicht bewusst. – Lunatik

+1

Freakin 'genial! Ich benutze diese Methode, um Strafen in Tabellenkalkulationen für Roller Derby-Kämpfe für Frauen hinzuzufügen. Wenn Sie jemals in Lancaster sind, haben Sie Freikarten. – Caveatrob