文字列から部分文字列(フィールド)を1つずつ取得します。
Loop Parse String , DelimiterChars, OmitChars
型:文字列
解析する文字列です。
型:文字列
If blank or omitted, each character of the input string will be treated as a separate substring.
このパラメータが"CSV"
の場合、文字列は標準的なカンマ区切り値形式で解析されます。ここでは、MS Excelで作成したCSVの行の例を示します:
"first field",SecondField,"the word ""special"" is quoted literally",,"last field, has literal comma"
Otherwise, specify one or more characters (case-sensitive), each of which is used to determine where the boundaries between substrings occur.
デリミタ文字は、部分文字列自体の一部とはみなされません。In addition, if there is nothing between a pair of delimiter characters within the input string, the corresponding substring will be empty.
事例:','
(カンマ)は、カンマが出現するたびに文字列を分割することになります。同様に、A_Space A_Tab
は、入力文字列の中でスペースやタブに遭遇するたびに新しい部分文字列を開始します。
文字列を文字ではなく区切り文字として使用するには、まずStrReplaceを使用して、文字列のすべての出現箇所を、テキスト内で文字通り使用されることのない単一の文字(例えば、これらの特殊文字のいずれか)に置き換えます:¢¤¥¦§©ª«®µ¶
。文字列<br> をデリミタとして使用する例を考えてみましょう:
NewHTML := StrReplace(HTMLString, "<br>", "¢") Loop Parse, NewHTML, "¢" ; セント記号を元に文字列を解析します。 { ; ... }
型:文字列
If blank or omitted, no characters will be excluded. Otherwise, specify a list of characters (case-sensitive) to exclude from the beginning and end of each substring. 例えば、OmitCharsが A_Space A_Tab
の場合、検索されたすべての部分文字列の先頭と末尾からスペースとタブが削除されます(中央は削除されない)。
DelimiterCharsが空白の場合、OmitCharsは考慮から除外されるべき文字を示します(ループはそれらを見ません)。
文字列解析ループは、文字列に含まれる各フィールドを一度に操作したい場合に便利です。解析ループはStrSplitよりもメモリ使用量が少なく(どちらにしてもメモリ使用は一時的ですが)、ほとんどの場合、使い勝手が良いです。
組込変数A_LoopFieldは、任意の構文解析ループ内に存在します。現在の部分文字列(フィールド)の内容を含んでいます。内側の解析ループが外側の解析ループに囲まれている場合、最も内側のループのフィールドが優先されます。
Although there is no built-in variable "A_LoopDelimiter", the example at the very bottom of this page demonstrates how to detect which delimiter character was encountered for each field.
入力文字列やそのフィールドのサイズに制限はありません。
解析前にフィールドを別の順序で並べるには、ソート機能を使用します。
ブロック、Break、Continue、A_Index変数(どのタイプのループにも存在する)については、「Loop」をご覧ください。
ループの後にElse文が続くこともあり、ループの反復回数がゼロの場合に実行されます。なお、Stringが空であるか、DelimiterCharsが省略され、Stringのすべての文字がOmitCharsに含まれない限り、ループは常に少なくとも1回繰り返されます。
StrSplit、ファイル読み込みループ、Loop、Break、Continue、ブロック、Sort、FileSetAttrib、FileSetTime
Colors := "red,green,blue" Loop parse, Colors, "," { MsgBox "Color number " A_Index " is " A_LoopField }
変数内の行を1行ずつ読み込みます(ファイル読み込みループに似ています)。FileReadにより、ファイルを変数に読み込むことができます。
Loop parse, FileContents, "`n", "`r" ; `r の前に `n を指定すると、Windows と Unix の両方のファイルをパースすることができます。 { Result := MsgBox("Line number " A_Index " is " A_LoopField ".`n`nContinue?",, "y/n") } until Result = "No"
これは、クリップボード用であることを除けば、上の例と同じです。クリップボードにファイルが含まれている場合、例えば開いているエクスプローラーウィンドウからコピーされたファイル(プログラムは自動的にファイル名に変換します)などは、この機能を使うと便利です。
Loop parse, A_Clipboard, "`n", "`r" { Result := MsgBox("File number " A_Index " is " A_LoopField ".`n`nContinue?",, "y/n") } until Result = "No"
CSV(Comma Separated Value)ファイルを解析します。
Loop read, "C:\Database Export.csv" { LineNumber := A_Index Loop parse, A_LoopReadLine, "CSV" { Result := MsgBox("Field " LineNumber "-" A_Index " is:`n" A_LoopField "`n`nContinue?",, "y/n") if Result = "No" return } }
Determines which delimiter character was encountered.
; 検索する文字列を初期化します。 Colors := "red,green|blue;yellow|cyan,magenta" ; 文字列中の位置を記録するためのカウンターを初期化します。 Position := 0 Loop Parse, Colors, ",|;" { ; Calculate the position of the delimiter character at the end of this field. Position += StrLen(A_LoopField) + 1 ; Retrieve the delimiter character found by the parsing loop. DelimiterChar := SubStr(Colors, Position, 1) MsgBox "Field: " A_LoopField "`nDelimiter character: " DelimiterChar }