StringSplit

使用指定的分隔符把一个字符串分解成多个子字符串并保存到数组中.

过时的: 不推荐在新脚本中使用此命令. 请使用 StrSplit 函数代替.

StringSplit, OutputArray, InputVar , Delimiters, OmitChars

参数

OutputArray

用来存储从 InputVar 分解出来的每个子字符串的伪数组名. 例如, 如果指定 MyArray, 那么 MyArray0 中会保存分解出来的子字符串的数目(没有则为 0), 首个子字符串为保存到 MyArray1, 第二个保存到 MyArray2 等.

函数中, 要创建全局而不是局部的伪数组, 必须先在函数中声明 MyArray0 为全局变量(对于假设全局函数, 反之亦成). 但是, 通常需要对每一个元素进行定义, 否则可能引起混乱的根源. 详见: 函数.

InputVar

需要被分解的变量的名称. 不要把名称括在百分号中, 除非您希望使用变量的 内容 作为被解析的变量名.

注意: InputVar 不能是 OutputArray 中的一个变量.

Delimiters(分隔符)

如果此参数为空或省略, 那么将把 InputVar 中的每个字符解析为单独的子字符串.

其他情况下, Delimiters 中可以包含一个或多个字符(区分大小写), 其中的每个都被用来确定 InputVar 中子字符串之间的边界. 由于分隔符不被视为子字符串的一部分, 所以它们不会被保存到 OutputArray. 此外, 如果 InputVar 中一对分隔符之间不存在其他字符, 那么相应的数组元素会被置空.

例如: `,(转义的逗号) 将根据逗号每次出现的位置分割字符串. 同样地, 使用 %A_Tab%%A_Space% 作为分隔符将在 InputVar 中每次遇到空格或 tab 时创建一个新的数组元素.

要使用字符串而不是字符作为分隔符, 首先使用 StringReplace 把这个字符串在所有出现的地方替换为文本中从未使用的单个字符. 参考这个例子, 其中使用字符串 <br> 作为分隔符:

StringReplace, NewHTML, HTMLString, <br>, ``, All  ; 把所有 <br> 替换为重音符.
StringSplit, MyArray, NewHTML, ``  ; 使用重音符分隔字符串.
OmitChars

可选的字符列表(区分大小写), 用来从每个数组元素的开始和结尾部分移除这些字符. 例如, 如果 OmitChars%A_Space%%A_Tab%, 那么每个元素中开始和结尾部分(但中间的不会) 的空格和 tab 会被移除.

如果 Delimiters 为空, 那么 OmitChars 表示需要从数组中排除的那些字符.

与其他大多数命令的最后一个参数不同, OmitChars 中的逗号必须进行转义(`,).

备注

如果数组元素已经存在, 那么 StringSplit 命令只会改变其前面 N 个元素的值, 此处 N 为在 InputVar 中的子字符串的数目. 原来存在的第 N 个元素之后的其他元素会保持不变. 因此, 最好使用零元素(MyArray0) 来确定此命令实际分解出了多少项.

空格和 tab 等空白字符会被保留, 除非它们被作为分隔符或包含在 OmitChars 中. 当 AutoTrim 开启(默认) 时, 通过将其赋值给自身, 可以把空格和 tab 从每个变量的两端移除. 例如: MyArray1 := %MyArray1%.

要分割标准 CSV(逗号分隔值) 格式的字符串, 请使用解析循环, 因为它具有内置的 CSV 处理功能.

要在拆分字段之前以不同的顺序排列, 请使用 Sort 命令.

如果您不需要把子字符串长时间的存储到内存中, 建议使用解析循环, 尤其在 InputVar 非常大时可以节约大量内存. 例如:

Colors := "red,green,blue"
Loop, Parse, Colors, `,
    MsgBox Color number %A_Index% is %A_LoopField%.

StrSplit(), 解析循环, 数组, Sort, SplitPath, IfInString, StringGetPos, StringMid, StringTrimLeft, StringTrimRight, StringLen, StringLower, StringUpper, StringReplace

示例

将一个句子拆分成单词组, 并报告第四个单词.

TestString := "This is a test."
StringSplit, word_array, TestString, %A_Space%, .  ; 忽略句点.
MsgBox, The 4th word is %word_array4%.

将一个以逗号分隔的颜色列表拆分成一个子字符串组, 并逐个遍历它们.

Colors := "red,green,blue"
StringSplit, ColorArray, Colors, `,
Loop, %ColorArray0%
{
    this_color := ColorArray%A_Index%
    MsgBox, Color number %A_Index% is %this_color%.
}
unixetc