StringGetPos

Ermittelt die Position einer bestimmten Teilzeichenkette innerhalb einer Zeichenkette.

Veraltet: Dieser Befehl ist nicht für neue Skripte empfohlen. Verwenden Sie stattdessen die InStr-Funktion.

StringGetPos, AusgabeVar, EingabeVar, Suchtext , Vorkommen, Offset

Parameter

AusgabeVar

Name der Variable, in der die ermittelte Position relativ zum ersten Zeichen von EingabeVar gespeichert werden soll. Das erste Zeichen ist bei StringGetPos die Position 0 und bei InStr() die Position 1.

EingabeVar

Name der Variable, deren Inhalt durchsucht werden soll. Umschließen Sie den Namen nicht mit Prozentzeichen, es sei denn, Sie wollen den Inhalt der Variable als Namen verwenden.

Suchtext

Der zu suchende Text. Die Übereinstimmung ist nicht Groß-/Kleinschreibung-sensitiv, es sei denn, StringCaseSense ist eingeschaltet.

Vorkommen

Das hat Einfluss darauf, welches Vorkommen gefunden wird, falls Suchtext mehrmals in EingabeVar vorkommt. Lässt man diesen Parameter weg, wird standardmäßig L1 verwendet (das heißt, dass EingabeVar von links nach rechts durchsucht wird, um die erste Übereinstimmung zu finden). Um dieses Verhalten zu ändern, geben Sie eine der folgenden Optionen an:

Ln: EingabeVar wird von links nach rechts durchsucht, um die n-te Übereinstimmung zu finden.

Rn: EingabeVar wird von rechts nach links durchsucht, um die n-te Übereinstimmung zu finden. Wenn n weggelassen wird (oder Vorkommen 1 ist), wird standardmäßig R1 verwendet.

Um beispielsweise das vierte Vorkommen von rechts zu finden, können Sie R4 angeben. Hinweis: Wenn n kleiner gleich 0 ist, wird keine Übereinstimmung gefunden.

Offset

Die Anzahl der Zeichen auf der linken oder rechten Seite (abhängig vom obigen Parameter), die übersprungen werden sollen. Lässt man diesen Parameter weg, wird standardmäßig 0 verwendet. Das folgende Beispiel beginnt die Suche beim 10. Zeichen von links: StringGetPos, AusgabeVar, EingabeVar, abc, , 9. Dieser Parameter kann ein Ausdruck sein.

ErrorLevel

ErrorLevel wird auf 1 gesetzt, wenn das angegebene Vorkommen von Suchtext nicht in EingabeVar gefunden werden konnte, ansonsten auf 0.

Bemerkungen

Im Gegensatz zu StringMid und InStr() gilt bei StringGetPos die 0 als Position des ersten Zeichens.

Die abgerufene Position bezieht sich immer auf das erste Zeichen von EingabeVar, egal ob Vorkommen und/oder Offset angegeben sind. Wenn zum Beispiel die Zeichenkette "abc" in 123abc789 gefunden wird, ist die gemeldete Position immer 3, unabhängig von der verwendeten Suchmethode.

Wenn das angegebene Vorkommen von Suchtext innerhalb von EingabeVar nicht existiert, wird AusgabeVar auf -1 und ErrorLevel auf 1 gesetzt.

Mit SplitPath kann ein Dateipfad auf einfache Weise in Verzeichnis, Dateiname und Erweiterung aufgeteilt werden.

Die internen Variablen %A_Space% und %A_Tab% können genutzt werden, um ein einzelnes Leerzeichen bzw. Tabulatorzeichen anzugeben. Sie sind nützlich, um nach Leer- und Tabulatorzeichen zu suchen, die entweder einzeln oder am Anfang oder Ende von Suchtext vorkommen.

Siehe auch

InStr(), RegExMatch(), IfInString, if Var in/contains Vergleichsliste, StringCaseSense, StringReplace, SplitPath, StringLeft, StringRight, StringMid, StringTrimLeft, StringTrimRight, StrLen() / StringLen, StringLower, StringUpper, if Var is Typ

Beispiele

#1

Heuhaufen := "abcdefghijklmnopqrs"
Nadel := "def"
StringGetPos, Pos, Heuhaufen, %Nadel%
if (Pos >= 0)
    MsgBox, Die Zeichenkette wurde auf Position %Pos% gefunden.

#2: Teilt den vollständigen Pfadnamen einer Datei in einzelne Komponenten auf. Beachten Sie, dass das mit StringSplit oder einer Parsenden Schleife viel einfacher wäre - das folgende Skript dient nur zur Veranschaulichung.

FileSelectFile, Datei, , , Wählen Sie einen Dateinamen in einem tief verschachtelten Ordner aus:
if (Datei != "")
{
    Pos_vorher := StrLen(Datei)
    Pos_vorher += 1 ; Setzt die Position auf das Zeichen, dass nach dem letzten Zeichen erfolgt.
    Loop
    {
        ; Sucht nach dem Nten Vorkommen, beginnend von rechts:
        StringGetPos, Pos, Datei, \, R%A_Index%
        if ErrorLevel
            break
        Länge := Pos_vorher - Pos - 1
        Pos_vorher := Pos
        Pos += 2  ; Für die Verwendung mit StringMid anpassen.
        StringMid, Pfad_Komponente, Datei, %Pos%, %Länge%
        MsgBox Pfadkomponente #%A_Index% (von rechts) ist:`n%Pfad_Komponente%
    }
}