Ruft Teile (Felder) einer Zeichenkette einzeln ab.
Loop, Parse, EingabeVar , Trennzeichen, WegzulassendeZeichen
Dieser Parameter muss das Wort PARSE sein, und darf, im Gegensatz zu den anderen Schleifenvarianten, keine Variablenreferenz enthalten, die in das Wort PARSE aufgelöst wird.
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 das Prozent-Leerzeichen-Präfix verwendet werden.
Wenn dieser Parameter weggelassen wird oder leer ist, wird jedes Zeichen in EingabeVar als einzelne Teilzeichenkette behandelt.
Enthält dieser Parameter CSV, wird EingabeVar als eine Zeichenkette mit kommagetrennten Werten angesehen (Comma-Separated Values). 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, das ein direkt geschriebenes Komma hat"
Ansonsten kann Trennzeichen ein oder mehrere Zeichen enthalten (Groß-/Kleinschreibung-sensitiv), um zu bestimmen, wo die Abgrenzungen zwischen den Teilzeichenketten in EingabeVar erfolgen sollen.
Die Trennzeichen selbst werden nicht als Teil der Teilzeichenkette angesehen. Wenn zwischen zwei Trennzeichen in EingabeVar nichts vorhanden ist, wird die entsprechende Teilzeichenkette leer sein.
Zum Beispiel: `,
(ein escapezeichenversehenes Komma) würde die Zeichenkette jeweils bei einem Komma teilen. Im Vergleich dazu würde %A_Tab%%A_Space% eine neue Teilzeichenkette erstellen, wann immer ein Leer- oder Tabulatorzeichen in EingabeVar gefunden wird.
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 genutzt wird. Zum Beispiel: ¢¤¥¦§©ª«®µ¶. Das folgende Beispiel zeigt, wie die Zeichenkette <br> als Trennung verwendet werden kann:
StringReplace, NeueHTML, HTMLZkette, <br>, ¢, All Loop, parse, NeueHTML, ¢ ; Parst die Zeichenkette basierend auf dem Cent-Symbol. { ... }
Eine optionale Liste mit Zeichen (Groß-/Kleinschreibung-sensitiv), die bei jeder Teilzeichenkette am Anfang und Ende entfernt werden sollen. Wenn WegzulassendeZeichen beispielsweise %A_Space%%A_Tab% wäre, wird bei jeder abgerufenen Teilzeichenkette Leer- oder Tabulatorzeichen am Anfang und Ende (aber nicht in der Mitte) entfernt.
Wenn Trennzeichen leer ist, gibt WegzulassendeZeichen an, welche Zeichen ignoriert werden sollen (die Schleife wird diese nicht sehen).
Im Gegensatz zum letzten Parameter der meisten anderen Befehle müssen Kommas in WegzulassendeZeichen mit einem Escapezeichen versehen werden (`,).
Eine zeichenkettenparsende Schleife ist nützlich, wenn Sie alle Felder in einer Zeichenkette einzeln abarbeiten wollen. 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 leichter zu verwenden.
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.
Zwar gibt es nicht die interne Variable "A_LoopDelimiter", allerdings zeigt das Beispiel ganz unten, wie man ermitteln kann, welche Trennung bei jedem Feld verwendet wurde.
EingabeVar oder ihre Felder können eine unbegrenzte Größe haben. Wenn sich der Inhalt von EingabeVar während einer Schleife ändert, wird die Schleife die Änderungen nicht berücksichtigen, weil sie eine temporäre Kopie des originalen Inhalts abarbeitet.
Mit dem Sort-Befehl können die Felder vor dem Parsen neu angeordnet werden.
Auf der Loop-Seite finden Sie Informationen zu Blöcken, Break, Continue und A_Index (sie können in jeder Schleifenvariante verwendet werden).
StrSplit(), dateilesende Schleife, Loop, Break, Continue, Blöcke, Sort, FileSetAttrib, FileSetTime, StringSplit
Parst eine kommagetrennte Zeichenkette.
Farben := "rot,grün,blau" Loop, parse, Farben, `, { MsgBox, Farbnummer %A_Index% ist %A_LoopField%. }
Liest den Inhalt einer Variable zeilenweise aus (so ähnlich wie eine dateilesende Schleife). Mit FileRead kann eine Datei in eine Variable geladen werden.
Loop, parse, DateiInhalt, `n, `r ; Durch die Angabe von `n vor `r können sowohl Windows- als auch Unix-Dateien geparst werden. { MsgBox, 4, , Zeilennummer %A_Index% ist %A_LoopField%.`n`nWeiter? IfMsgBox, No, break }
Dieses Beispiel ist das gleiche wie oben, außer dass es für die Zwischenablage ist. Es ist nützlich, wann immer die Zwischenablage Dateien enthält, wie z. B. solche, die von einem offenen Explorer-Fenster kopiert wurden (das Programm wandelt solche Dateien automatisch in ihre Dateinamen um).
Loop, parse, clipboard, `n, `r { MsgBox, 4, , Dateinummer %A_Index% ist %A_LoopField%.`n`nWeiter? IfMsgBox, No, break }
Parst eine Datei mit kommagetrennten Werten (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, welche Trennung verwendet wurde.
; Initialisiert die zu durchsuchenden Zeichenkette. Farben := "Rot,Grün|Blau;Gelb|Cyan,Magenta" ; Initialisiert einen Zähler, um unsere aktuelle Zeichenkettenposition im Auge zu behalten. Position := 0 Loop, Parse, Farben, `,|; { ; Berechnet die Position der Trennung am Ende dieses Feldes. Position += StrLen(A_LoopField) + 1 ; Ermittelt die Trennung, die von der parsenden Schleife gefunden wurde. Trennung := SubStr(Farben, Position, 1) MsgBox Feld: %A_LoopField%`Trennung: %Trennung% }