在VSL脚本管理器中您壹旦为那么些

该习题演示解析字符串及用字符串中包蕴的音信填充数组(Array)。

   那么些演练中,你会看到哪些给VSL脚本增多pIn,以及在错误事件中怎样去稳固那些荒唐。该练习的目的将七个字符串作为pIn并将之以单个字符串情势从pOut输出。 

  1. 始发一个新的作品并创办3个数组(Array)。把数组重命名字为 “Players”
    (没有引号) 并增添多少个列(column),如下命名 – 列类型:

    • NickNames – String
    • Age – Integer
    • Score – Integer.
  2. 在Level下创立新本子,并丰硕二个Run VSL BB。在VSL Script
    Manager中增多七个pIn。第二个pIn重命名称为”data”,类型设为String。第三个pIn重命名字为”array”,类型设为Array。
  3. 切换成Schematic工作区,输入以下字符(不包涵引号),作为“data”pIn的值:

    “Eva,22,1024.
    Jane,34, 544.
    Pierre, 17, 5410.
    John, 85,10.”

    你大概想要张开’data’ pIn中的数据输入的字段。

    构想是分析输入的字符串,提抽取个中的音信,然后复制到数组中。该习题中,所急需的音讯是名字、年龄和积分。逗号和句号作为数据是引不起人们感兴趣的,但作为隔开分离数据字段或标识行结束点的字符是老大有效的。你会用到VSL
    <- SDK 对应表 –
    类与办法

    中列出了的StringTokenizer类。给定要解析的字符串及选择的分隔符,”NextToken(str
    iPrevToken)” 那个格局就会一个个的领抽出令牌。

    【译注:互联网能源 –
    bruce


    在邱仲潘译的《Mastering Java 2》有这么壹段

     StreamTokenizer类依照用户定义的条条框框,从输入流中提取可辨识的子串和标志符号,这一个进度称为令牌化
    (tokenizing ),因为流简化为了令牌符号。令牌 (token
    )经常代表首要字、变量名、字符串、直接量 和大括号等语法标点。

    小编们参考邱仲潘的那段译文,统一为
    token:令牌
    tokenizing:令牌化
    tokenizer:令牌解析器

    cherami提到的翻译为“标识”,也得以领略,但token更规范的指3个字串(或流)中的以空格、’,’等(用户钦命的规则)分割开来的3个3个的子串,使用“标志”好像范围比较窄。借用令牌网中的这么些术语--“令牌”,作者觉着很形象。

  4. 在代码窗口中输入上面包车型大巴代码:

    void main()
    
    {
    
        // We clear all data in the array
    

新建3个Virtools小说,并在Level中开创脚本。Schematic中,在本子主体区域按住CTLANDL键不放并双击鼠标,会现出1个可用BB列表。输入“ru”(不带有引号),那时会冒出“Run
VSL”。点击”Run
VSL”就可把该BB插手到脚本中。最终,选用该BB,按下F2,将其重命名称叫“Concat
String”。 

        array.Clear();



        // We create the first tokenizer in order to

        // get data line by line. The "." separates lines.


        str tokenLine = null;

        StringTokenizer tokenizerLine(data.CStr(), ".");



        int row = 0;



        // Get new line


        while (tokenLine = tokenizerLine.NextToken(tokenLine))

        {

            // For each line extracted, we add a row in the array


            array.AddRow();



            // The second tokenizer works with the extracted line

            // to extract the data on a word by word basis.

            // The "," separates words.


            str tokenWord = null;

            StringTokenizer tokenizerWord(tokenLine, ",");



            int column = 0;



            // Get new word


            while (tokenWord = tokenizerWord.NextToken(tokenWord))

            {

                // Insert word in the array


                array.SetElementStringValue(row, column, tokenWord);

                ++column;

            }           

            ++row;

        }

    }

前日你要为那么些BB加多八个pIn参数(因为有四个字符串要被统一起来)和二个pOut参数(用于出口结果)。在VSL脚本管理器中您只要为这一个“Run
VSL” BB配置连接器。 

  1. 编写翻译VSL脚本并运维。要确认那多少个数组中的内容如下:

在那几个“Run VSL”BB上按下V键,张开VSL Script
Manager。在面板的右手中,右击“pIn”并采取“Add pIn” 。

[![](https://sites.google.com/site/x3dofcn/_/rsrc/1245403946960/vsl-virtools/Examples/4_parse-string/vsl_parse1.png)](https://sites.google.com/site/x3dofcn/vsl-virtools/Examples/4_parse-string/vsl_parse1.png?attredirects=0)



你可以看到,"Jane", "Pierre" 和
"John"这几个名字提取得不是很好,它们都以一个换行符开始(非打印换行符以一个小盒子的样子显示)。为了移除这个额外的字符,你需要给VSL脚本添加一个移除换行符的函数。下面的代码应该能完成这个任务:  

    void       RemoveFirstReturnCharacter(String str2clear)

    {

        // If first character is equal to return...


        if (str2clear[0] == '/n')

            / ... crop string from second character to the end


            str2clear = str2clear.Crop(1, str2clear.Length()-1);

    }

你刚才就加多了3个新的pIn参数给您的BB,它的暗中同意类型是整形(int),暗中认可的参数名字是“pIn0”。那两项你都要改。 

  1. 修改你的代码,要包涵地点的函数。你的代码以后理应是像那么些样子:

    void main()
    
    {
    
        // We clear all data in the array
    

在档次(Type)列中双击”int”,将它改为String。按下F二将以此pIn参数重命名称为“string1”(不带有引号)。加多第三个pIn参数,退换类型为String,同时重命名称叫“string二”。最终,以同等的法子加多一个pOut参数,再将其成为String型比量齐观命名字为“strConcat”。 

        array.Clear();



        // We create the first tokenizer in order to

        // get data line by line


        str tokenLine = null;

        StringTokenizer tokenizerLine(data.CStr(), ".");



        int row = 0;



        // Get new line


        while (tokenLine = tokenizerLine.NextToken(tokenLine))

        {

            // For each line extracted, we add a row in the array


            array.AddRow();



            // The second tokenizer works with the extracted line

            // to extract the data on a word by word basis.

            // The "," separates words.


            str tokenWord = null;

            StringTokenizer tokenizerWord(tokenLine, ",");



            int column = 0;



            // Get new word


            while (tokenWord = tokenizerWord.NextToken(tokenWord))

            {

                // Remove first character if it's a '/n'


                String strToClear = tokenWord;

                RemoveFirstReturnCharacter(strToClear);



                // Insert word in the array


                array.SetElementStringValue(row, column, strToClear.CStr());

                ++column;

            }           

            ++row;

        }

    }


现在,在把单词插入数组之前,新的函数检查字符串并对之修改(如果有必要) -
移除换行符。  

拷贝上面的代码到代码窗口(正是下面第3步中重命名称为了“Concat String ”的BB)

  1. 编写翻译你的VSL脚本并运行。你的数组今后是否看起来诸多了?
   void main()
    {
        strConcat = string1 + string2   
    } 
[![](https://sites.google.com/site/x3dofcn/_/rsrc/1245403976002/vsl-virtools/Examples/4_parse-string/vsl_parse2.png)](https://sites.google.com/site/x3dofcn/vsl-virtools/Examples/4_parse-string/vsl_parse2.png?attredirects=0)

有限匡助理编辑译格局设为Debug,并编写翻译你的剧本(右键单击那么些剧本,选用编写翻译)。 

其一VSL脚本是编写翻译不了的,错误音信会展现出来,布告你错误并告诉错误发生在哪一行:“Concat
String, line 4 : parse error, expecting‘;’”

立时找到这一个错误,接纳以下方法中的一种: 

  • 双击该错误新闻
  • 按下F4

带有了不当的那一行,会以色情箭头提醒出来,错误消息已经告知您必要加上八个“;”。

改良错误后那行如下所示:

       strConcat = string1 + string2;

再编译一回,然后切换来Virtools的Schematic工作区。要编写所创办的pIN,双击“Concat
String”BB,会弹出一个参数编辑对话框,输入以下字符串(不包括引号): 

  • string1 = “This is your “
  • string2 = “second vsl script”

接连“Concat
String”BB到剧本的Start,并按下播放(Play),然后点击截止(Stop)。检查pOut参数strConcat
的值;它的值将会是”This is your second vsl script”。

相关文章