通过实例学习Virtools脚本语言VSL - 解析字符串
该习题演示解析字符串及用字符串中包含的信息填充数组(Array)。
-
开始一个新的作品并创建一个数组(Array),把数组重命名为 "Players",并添加三个列(column),名称分别为:NickNames - String、Age - Integer、Score - Integer。
-
在Level下创建新脚本,并添加一个Run VSL BB。在VSL Script Manager中添加两个pIn。第一个pIn重命名为"data",类型设为String;第二个pIn重命名为"array",类型设为Array。
-
切换到代码编辑器,编写如下代码:
void main()
{
// 清空数组中的所有数据
array.Clear();
// 创建第一个tokenizer来逐行读取数据
str tokenLine = null;
StringTokenizer tokenizerLine(data.CStr(), ".");
int row = 0;
// 逐行获取数据
while (tokenLine = tokenizerLine.NextToken(tokenLine))
{
// 每次读取一行后,添加一行到数组中
array.AddRow();
// 创建第二个tokenizer来逐词读取每一行的数据
str tokenWord = null;
StringTokenizer tokenizerWord(tokenLine, ",");
int column = 0;
// 逐词获取数据
while (tokenWord = tokenizerWord.NextToken(tokenWord))
{
// 插入数据到数组中
array.SetElementStringValue(row, column, tokenWord);
++column;
}
++row;
}
}
- 编译并运行VSL脚本。确认数组中的内容如下:
你可以看到,"Jane", "Pierre" 和 "John"这几个名字提取得不是很好,它们都以一个换行符开始(非打印换行符以一个小盒子的样子显示)。为了移除这个额外的字符,你需要给VSL脚本添加一个移除换行符的函数。下面的代码应该能完成这个任务:
void RemoveFirstReturnCharacter(String str2clear)
{
// 如果字符串的第一个字符是'/n'...
if (str2clear[0] == '/n')
// ...则从第二个字符开始裁剪字符串到末尾
str2clear = str2clear.Crop(1, str2clear.Length()-1);
}
- 修改你的代码,要包括上面的函数。你的代码现在应该是像这个样子:
void main()
{
// 清空数组中的所有数据
array.Clear();
// 创建第一个tokenizer来逐行读取数据
str tokenLine = null;
StringTokenizer tokenizerLine(data.CStr(), ".");
int row = 0;
// 逐行获取数据
while (tokenLine = tokenizerLine.NextToken(tokenLine))
{
// 每次读取一行后,添加一行到数组中
array.AddRow();
// 创建第二个tokenizer来逐词读取每一行的数据
str tokenWord = null;
StringTokenizer tokenizerWord(tokenLine, ",");
int column = 0;
// 逐词获取数据
while (tokenWord = tokenizerWord.NextToken(tokenWord))
{
// 移除字符串中的换行符(如果存在)
String strToClear = tokenWord;
RemoveFirstReturnCharacter(strToClear);
// 插入数据到数组中
array.SetElementStringValue(row, column, strToClear.CStr());
++column;
}
++row;
}
}
- 编译并运行你的VSL脚本。现在,你的数组应该看起来好多了。
通过以上步骤,你可以成功解析字符串并将数据填充到数组中,并移除不必要的换行符。