Loop Parse

Ruft Teile (Felder) einer Zeichenkette nacheinander ab.

Loop Parse Zkette , Trennzeichen, ZuEntfernendeZeichen

Parameter

Zkette

Typ: Zeichenkette

Eine Zeichenkette, die geparst werden soll.

Trennzeichen

Typ: Zeichenkette

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

Wenn dieser Parameter "CSV" ist, wird zum Parsen der Zeichenkette 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 verwendet werden.

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

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

Um eine Zeichenkette anstelle eines Zeichens als Trennung zu verwenden, verwenden Sie zunächst StrReplace, 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:

NeueHTML := StrReplace(HTMLZkette, "<br>", "¢")
Loop Parse, NeueHTML, "¢" ; Die Zeichenkette via Cent-Symbol parsen.
{
    ; ...
}
ZuEntfernendeZeichen

Typ: Zeichenkette

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).

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 (obwohl in beiden Fällen der Speicherverbrauch nur temporär ist) 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). 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.

Die Zeichenkette oder ihre Felder können unbegrenzt groß sein.

Mit der Sort-Funktion 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).

Nach der Schleife kann optional eine Else-Anweisung angegeben werden, die ausgeführt wird, wenn die Schleife null Wiederholungen hatte. Beachten Sie, dass die Schleife immer mindestens eine Wiederholung hat, es sei denn, Zkette ist leer oder Trennzeichen wird weggelassen und alle Zeichen in Zkette sind in ZuEntfernendeZeichen enthalten.

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

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.
{
    Ergebnis := MsgBox("Zeile Nr. " A_Index " ist " A_LoopField ".`n`nWeiter?",, "y/n")
}
until Ergebnis = "No"

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, A_Clipboard, "`n", "`r"
{
    Ergebnis := MsgBox("Datei Nr. " A_Index " ist " A_LoopField ".`n`nWeiter?",, "y/n")
}
until Ergebnis = "No"

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

Loop read, "C:\Datenbank-Export.csv"
{
    ZeileNummer := A_Index
    Loop parse, A_LoopReadLine, "CSV"
    {
        Ergebnis := MsgBox("Feld " ZeileNummer "-" A_Index " ist:`n" A_LoopField "`n`nWeiter?",, "y/n")
        if Ergebnis = "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
}