Loop (Zeichenkette parsen)

Ruft Teile (Felder) einer Zeichenkette nacheinander ab.

Loop, Parse, EingabeVar , Trennzeichen, ZuEntfernendeZeichen

Parameter

Parse

Das Wort PARSE. Dieser Parameter darf im Gegensatz zu anderen Schleifenvarianten keine Variablenreferenz sein, die in das Wort PARSE aufgelöst wird.

EingabeVar

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

[v1.1.21+]: Dieser Parameter kann ein Ausdruck sein, allerdings muss dafür das Prozent-Leerzeichen-Präfix verwendet werden, z.B. % "rot,grün,blau".

Trennzeichen

Wenn leer oder weggelassen, wird jedes Zeichen in EingabeVar als einzelne Teilzeichenkette behandelt.

Wenn dieser Parameter die Zeichenkette CSV ist, wird zum Parsen von EingabeVar das Standardformat für kommagetrennte Werte (Comma-Separated Values) verwendet. Das folgende Beispiel ist eine CSV-Zeile, die mit MS Excel erstellt wurde:

"Erstes Feld",ZweitesFeld,"Das Wort ""Spezial"" in direkt geschriebenen Anführungszeichen",,"Letztes Feld, mit direkt geschriebenem Komma"

Andernfalls geben Sie ein oder mehrere Zeichen an (Groß-/Kleinschreibung-sensitiv), die jeweils zur Abgrenzung der Teilzeichenketten in EingabeVar verwendet werden.

Die Trennzeichen selbst werden nicht als Teil der Teilzeichenkette betrachtet. Wenn sich zwischen zwei Trennzeichen in EingabeVar nichts befindet, wird die entsprechende Teilzeichenkette leer sein.

Zum Beispiel: `, (ein escapezeichenversehenes Komma) würde die Zeichenkette an jedem Komma teilen, während %A_Space%%A_Tab% eine neue Teilzeichenkette an jedem Leer- oder Tabulatorzeichen in EingabeVar beginnen würde.

Um eine Zeichenkette anstelle eines Zeichens als Trennung zu verwenden, verwenden Sie zunächst StrReplace() oder StringReplace, um alle Vorkommen der Zeichenkette mit einem einzelnen Zeichen zu ersetzen, das nie im Text vorkommt, wie zum Beispiel: ¢¤¥¦§©ª«®µ¶. Das folgende Beispiel zeigt, wie die Zeichenkette <br> als Trennung verwendet werden kann:

StringReplace, NeueHTML, HTMLZkette, <br>, ¢, All
Loop, parse, NeueHTML, ¢ ; Die Zeichenkette via Cent-Symbol parsen.
{
    ; ...
}
ZuEntfernendeZeichen

Wenn leer oder weggelassen, werden keine Zeichen entfernt. Andernfalls geben Sie eine Liste von Zeichen an (Groß-/Kleinschreibung-sensitiv), die am Anfang und Ende jeder Teilzeichenkette entfernt werden sollen. Wenn ZuEntfernendeZeichen z.B. %A_Space%%A_Tab% ist, werden Leer- und Tabulatorzeichen am Anfang und Ende (aber nicht in der Mitte) jeder abgerufenen Teilzeichenkette entfernt.

Wenn Trennzeichen leer ist, gibt ZuEntfernendeZeichen die Zeichen an, die ignoriert werden sollen (die Schleife wird diese nicht sehen).

Im Gegensatz zum letzten Parameter der meisten anderen Befehle müssen Kommas in ZuEntfernendeZeichen mit einem Escapezeichen versehen werden (`,).

Bemerkungen

Eine parsende Schleife ist nützlich, wenn alle Felder in einer Zeichenkette nacheinander abgearbeitet werden sollen. Eine parsende Schleife verbraucht weniger Speicher als StrSplit() oder StringSplit (da diese ein permanentes Array oder Pseudo-Array erzeugen) und ist in den meisten Fällen einfacher zu benutzen.

Die interne Variable A_LoopField ist nur in einer parsenden Schleife von Bedeutung. Sie enthält den Inhalt der aktuellen Teilzeichenkette (Feld) aus EingabeVar. Wenn eine innere parsende Schleife von einer äußeren parsenden Schleife umschlossen ist, hat das Feld der innersten Schleife Vorrang.

Es gibt keine interne Variable namens A_LoopDelimiter, allerdings zeigt das Beispiel ganz unten, wie man herausfindet, welches Trennzeichen für jedes Feld verwendet wurde.

EingabeVar oder ihre Felder können unbegrenzt groß sein. Wenn sich der Inhalt von EingabeVar während der Schleifenausführung ändert, wird die Schleife die Änderungen nicht "sehen", da sie eine temporäre Kopie des Originalinhalts abarbeitet.

Mit dem Sort-Befehl können die Felder vor dem Parsen neu sortiert werden.

Auf der Loop-Seite finden Sie Informationen zu Blöcken, Break, Continue und A_Index (die in jeder Schleifenvariante verwendet werden kann).

StrSplit(), dateilesende Schleife, Loop, Break, Continue, Blöcke, Sort, FileSetAttrib, FileSetTime, StringSplit

Beispiele

Parst eine kommagetrennte Zeichenkette.

Farben := "rot,grün,blau"
Loop, parse, Farben, `,
{
    MsgBox, Farbe Nr. %A_Index% ist %A_LoopField%.
}

Liest den Inhalt einer Variable zeilenweise aus (ähnlich einer dateilesenden Schleife). Mit FileRead kann eine Datei in eine Variable geladen werden.

Loop, parse, DateiInhalt, `n, `r  ; Durch Angabe von `n vor `r können sowohl Windows- als auch Unix-Dateien geparst werden.
{
    MsgBox, 4, , Zeile Nr. %A_Index% ist %A_LoopField%.`n`nWeiter?
    IfMsgBox, No, break
}

Dies ist dasselbe wie das Beispiel oben, aber für die Zwischenablage. Es ist nützlich, wenn sich in der Zwischenablage Dateien befinden, die z.B. aus einem geöffneten Explorer-Fenster kopiert wurden (das Programm wandelt solche Dateien automatisch in ihre Dateinamen um).

Loop, parse, clipboard, `n, `r
{
    MsgBox, 4, , Datei Nr. %A_Index% ist %A_LoopField%.`n`nWeiter?
    IfMsgBox, No, break
}

Parst eine Datei, die kommagetrennte Werte enthält (CSV).

Loop, read, C:\Datenbank-Export.csv
{
    ZeileNummer := A_Index
    Loop, parse, A_LoopReadLine, CSV
    {
        MsgBox, 4, , Feld %ZeileNummer%-%A_Index% ist:`n%A_LoopField%`n`nWeiter?
        IfMsgBox, No
            return
    }
}

Ermittelt, welches Trennzeichen verwendet wurde.

; Zeichenkette zum Durchsuchen initialisieren.
Farben := "Rot,Grün|Blau;Gelb|Cyan,Magenta"
; Zähler für aktuelle Zeichenkettenposition initialisieren.
Position := 0

Loop, Parse, Farben, `,|;
{
    ; Position des Trennzeichens am Ende dieses Feldes berechnen.
    Position += StrLen(A_LoopField) + 1
    ; Trennzeichen abrufen, das von der parsenden Schleife gefunden wurde.
    Trennzeichen := SubStr(Farben, Position, 1)

    MsgBox Feld: %A_LoopField%`nTrennzeichen: %Trennzeichen%
}