2016-05-26 4 views
0

Zum Beispiel habe ich eine Zeichenfolge A-456-BC-123;DEF-456;GHI-789. Und ich muss nach dem zweiten Teil suchen: DEF-456 mit Schlüsselwort 456. Das potentielle Problem hierbei ist, dass der erste Teil A-456-BC-123 auch das Schlüsselwort 456 hat. Derzeit ist meine Logik, dass split die Zeichenfolge zunächst ;, split jedes davon wieder mit -, den letzten Artikel dieser Array, Suchwort 456. Eine andere Sache ist, dass ich nicht eine vollständige Keyword-Übereinstimmung wie DEF-456 machen möchte, ich möchte nur 456 als Schlüsselwort verwenden, um DEF-456 zu finden, mit anderen Worten, 456 sollte das letzte Segment der Zeichenfolge, die ich möchte.Index außerhalb des Bereichs, wenn versucht wird, das letzte Element eines Array zu bekommen

Hier sind meine Codes:

FirstSplit= split("A-456-BC-123;DEF-456;GHI-789",";") 

For each code in FirstSplit 
    SecondSplit = split(FirstSplit,"-") 
    'get Array Count 
    Count = Ubound(SecondSplit) 
    'get the last item in Array 
    If SecondSplit(Count-1) = "456" Then 
     'doing something 
    End if 
Next 

Derzeit wird ein Fehler bei SecondSplit(Count-1) erzeugen, sagen, dass "Subscript out of range: '[number: -1]'"

mir jemand sagen könnte, wie es zu beheben?

Antwort

3

Das eigentliche Problem ist hier:

SecondSplit = Split(FirstSplit, "-") 

Sie sollten Ihr Element sein Aufspaltung, die Sie in der Variablen code von Ihrem For Each Schleife gespeichert haben. Beim Versuch, ein Array zu teilen, sollten Sie einen Type Mismatch Fehler erhalten, aber vielleicht vbscript genug verzeihen, um ein 0-Element-Array zurück oder etwas zu versuchen und zurückzugeben. Wie dem auch sei:

SecondSplit = Split(Code, "-") 

Auch beim letzten Element suchen benutzen Sie einfach:

If secondSplit(Ubound(SecondSplit)) = "456" Then 

1 aus dem ubound Subtrahierend würde erhalten Sie die zweite zum letzten Element.

2

Sie brauchen nicht zweimal zu teilen - was Sie suchen ist Right():

FirstSplit = split("A-456-BC-123;DEF-456;GHI-789",";") 

For each code in FirstSplit 
    If Right(code, 3) = "456" Then 
     ' do something 
    End If 
Next 

Obwohl dies auch einen Eintrag wie ABC-1456 entsprechen würde. Wenn das - Symbol ein erforderliches Trennzeichen ist, müssen Sie If Right(code, 4) = "-456" sagen.

+1

Oder verwenden Sie etwas wie 'InStr (1, StrReverse (Code)," - ")' anstelle von hart codieren die Anzahl der Zeichen von 'Right()' zurückzukehren. – Lankymart

Verwandte Themen