通过实例学习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脚本。现在,你的数组应该看起来好多了。
通过以上步骤,你可以成功解析字符串并将数据填充到数组中,并移除不必要的换行符。