`
web3d
  • 浏览: 86194 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

通过实例学习Virtools脚本语言VSL - 解析字符串

 
阅读更多
<div dir="ltr">
<p>该习题演示解析字符串及用字符串中包含的信息填充数组(Array)。</p>
<ol>
<li>开始一个新的作品并创建一个数组(Array)。把数组重命名为 "Players"
    (没有引号) 并添加三个列(column),如下命名 - 列类型:<br><ul>
<li>NickNames - String
      </li>
<li>Age - Integer
      </li>
<li>Score - Integer.<br>
</li>
</ul>
</li>
<li> 在Level下创建新脚本,并添加一个Run VSL BB。在VSL Script Manager中添加两个pIn。第一个pIn重命名为"data",类型设为String。第二个pIn重命名为"array",类型设为Array。<br>
</li>
<li>切换到 Schematic工作区,输入以下字符(不包括引号),作为“data”pIn的值:
<p>
    "Eva,22,1024. <br>
    Jane,34, 544. <br>
    Pierre, 17, 5410. <br>
    John, 85,10."</p>
<p>
你可能想要展开'data' pIn中的数据输入的字段。</p>
<p>
    构想是解析输入的字符串,提取出其中的信息,然后复制到数组中。该习题中,所需要的信息是名字、年龄和积分。逗号和句号作为数据是引不起人们兴趣的,但作为隔离数据字段或标志行结束点的字符是非常有用的。你会用到<a href="https://sites.google.com/site/x3dofcn/vsl-virtools/vsl-sdk-binding-tables/vsl_classes">VSL &lt;-
    SDK 对应表 - 类与方法</a>
中列出了的StringTokenizer类。给定要解析的字符串及用到的分隔符,"NextToken(str iPrevToken)" 这个方法就会一个个的提取出令牌。<br><br><span style="font-family: arial,sans-serif; color: #000000;">【译注:网络资源 - </span>
<span style="font-family: arial,sans-serif; color: #000000;">
<strong>bruce</strong>
</span>
<span style="font-family: arial,sans-serif; color: #000000;">
</span>
<span style="font-family: arial,sans-serif; color: #000000;">- 在邱仲潘译的《MasteringJava2》有这么一段<br><br>
StreamTokenizer类根据用户定义的规则,从输入流中提取可识别的子串和标记符号,这个过程称为<strong>令牌化</strong>
(<strong>tokenizing</strong>
),因为流简化为了令牌符号。<strong>令牌</strong>
(<strong>token</strong>
)通常代表关键字、变量名、字符串、<strong>直接量</strong>
和大括号等语法标点。<br><br>
我们参考邱仲潘的这段译文,统一为<br>
token:令牌<br>
tokenizing:令牌化<br>
tokenizer:令牌解析器<br><br>
cherami提到的翻译为“标记”,也可以理解,但token更准确的指一个字串(或流)中的以空格、','等(用户指定的规则)分割开来的一个一个的子串,使用“标记”好像范围比较窄。借用令牌网中的这个术语--“令牌”,我觉得很形象。<br></span>
】<br></p>
</li>
<li>在代码窗口中输入下面的代码:<br><pre>void main()<br>
{<br><span>// We clear all data in the array</span>
<br>
array.Clear();<br><br><span>// We create the first tokenizer in order to<br>
// get data line by line. The "." separates lines.</span>
<br>
str tokenLine = null;<br>
StringTokenizer tokenizerLine(data.CStr(), ".");<br><br>
int row = 0;<br><br><span>// Get new line</span>
<br>
while (tokenLine = tokenizerLine.NextToken(tokenLine))<br>
{<br><span>// For each line extracted, we add a row in the array</span>
<br>
array.AddRow();<br><br><span>// The second tokenizer works with the extracted line<br>
// to extract the data on a word by word basis.<br>
// The "," separates words.</span>
<br>
str tokenWord = null;<br>
StringTokenizer tokenizerWord(tokenLine, ",");<br><br>
int column = 0;<br><br><span>// Get new word</span>
<br>
while (tokenWord = tokenizerWord.NextToken(tokenWord))<br>
{<br><span>// Insert word in the array</span>
<br>
array.SetElementStringValue(row, column, tokenWord);<br>
++column;<br>
} <br>
++row;<br>
}<br>
}
</pre>
</li>
<li>编译VSL脚本并运行。要确认那个数组中的内容如下:<br><br><br><div style="display: block; text-align: left;">
<a href="https://sites.google.com/site/x3dofcn/vsl-virtools/Examples/4_parse-string/vsl_parse1.png?attredirects=0"><img src="https://sites.google.com/site/x3dofcn/_/rsrc/1245403946960/vsl-virtools/Examples/4_parse-string/vsl_parse1.png" border="0" alt=""></a>
</div>
<br><br>
    你可以看到,"Jane", "Pierre" 和 "John"这几个名字提取得不是很好,它们都以一个换行符开始(非打印换行符以一个小盒子的样子显示)。为了移除这个额外的字符,你需要给VSL脚本添加一个移除换行符的函数。下面的代码应该能完成这个任务:<br><pre>void RemoveFirstReturnCharacter(String str2clear)<br>
{<br><span>// If first character is equal to return...</span>
<br>
if (str2clear[0] == '/n')<br><span>/ ... crop string from second character to the end</span>
<br>
str2clear = str2clear.Crop(1, str2clear.Length()-1);<br>
}<br></pre>
</li>
<li>修改你的代码,要包括上面的函数。你的代码现在应该是像这个样子:<br><pre>void main()<br>
{<br><span>// We clear all data in the array</span>
<br>
array.Clear();<br><br><span>// We create the first tokenizer in order to<br>
// get data line by line</span>
<br>
str tokenLine = null;<br>
StringTokenizer tokenizerLine(data.CStr(), ".");<br><br>
int row = 0;<br><br><span>// Get new line</span>
<br>
while (tokenLine = tokenizerLine.NextToken(tokenLine))<br>
{<br><span>// For each line extracted, we add a row in the array</span>
<br>
array.AddRow();<br><br><span>// The second tokenizer works with the extracted line<br>
// to extract the data on a word by word basis.<br>
// The "," separates words.</span>
<br>
str tokenWord = null;<br>
StringTokenizer tokenizerWord(tokenLine, ",");<br><br>
int column = 0;<br><br><span>// Get new word</span>
<br>
while (tokenWord = tokenizerWord.NextToken(tokenWord))<br>
{<br><span>// Remove first character if it's a '/n'</span>
<br>
String strToClear = tokenWord;<br>
RemoveFirstReturnCharacter(strToClear);<br><br><span>// Insert word in the array</span>
<br>
array.SetElementStringValue(row, column, strToClear.CStr());<br>
++column;<br>
} <br>
++row;<br>
}<br>
}<br>
现在,在把单词插入数组之前,新的函数检查字符串并对之修改(如果有必要) - 移除换行符。<br></pre>
</li>
<li> 编译你的VSL脚本并运行。你的数组现在是不是看起来好多了?<br><br><br><div style="display: block; text-align: left;">
<a href="https://sites.google.com/site/x3dofcn/vsl-virtools/Examples/4_parse-string/vsl_parse2.png?attredirects=0"><img src="https://sites.google.com/site/x3dofcn/_/rsrc/1245403976002/vsl-virtools/Examples/4_parse-string/vsl_parse2.png" border="0" alt=""></a>
</div>
</li>
</ol>
</div>
分享到:
评论

相关推荐

    Virtools例子----走迷宫(附带max模型、Virtools源文件)

    在压缩包文件"Virtools-走迷宫"中,可能包含了以下内容: 1. Virtools工程文件:这是Virtools项目的主要文件,包含了场景布局、行为脚本、资源引用等所有信息。用户可以使用Virtools软件打开此文件,查看和修改项目...

    virtools学习资料

    ### Virtools学习资料:VSL脚本语言入门与实践 #### 一、VSL脚本语言简介 Virtools是一款强大的3D应用开发平台,广泛应用于游戏开发、虚拟现实、建筑可视化等多个领域。Virtools提供了丰富的功能和工具集,其中VSL...

    Virtools播放器去水印Lib-5.0.0.8版

    通过SDK,你可以访问到Virtools的各种内部函数和对象,包括与播放器界面和渲染引擎交互的部分。 在实际操作中,你可能需要将CKKernelInit.lib链接到你的项目中,然后调用相应的API来初始化和控制播放器的行为。这...

    Virtools的VSL和SDK编程编码规则

    Virtools 是一款强大的交互式3D应用开发工具,它的VSL(Virtools Script Language)是内置的脚本语言,而SDK(Software Development Kit)则提供了更底层的编程接口。为了确保代码的质量、可读性和可维护性,遵循...

    virtools 文件 实例文件 源文件

    virtools 文件 实例文件 源文件virtools 文件 实例文件 源文件virtools 文件 实例文件 源文件

    virtools基本教材

    - **脚本语言**:Virtools脚本语言(VSL),用于编写自定义行为。 4. **参数** - **概述**:用于控制对象行为的数据值。 - **参数操作**:通过运算符改变参数的值,实现动态调整对象的状态。 5. **属性** - **...

    virtools实例资源

    通过对源代码的学习,开发者可以学习到如何使用VirTools内置的语言(如BCML或BScript)来编写游戏逻辑,包括角色移动、碰撞检测、用户输入响应等核心功能。例如,`collision_final.cmo`可能是一个关于碰撞检测的最终...

    Virtools漫游脚本程序

    Virtools漫游脚本程序是一种基于Virtools软件的高级编程技术,主要用于创建虚拟现实(VR)环境中的交互式漫游体验。...通过深入学习和实践,开发者可以利用Virtools的强大力量,创造出生动且引人入胜的VR应用。

    virtools开发之底层篇

    本书面向已经有一定编程经验,尤其是Virtools基础的读者,旨在通过学习VSL脚本和SDK开发,提升开发者对Virtools功能的挖掘和利用能力。VSL脚本语言是Virtools中的核心部分,初学者可以从基础语法入手,逐步了解和...

    Virtools-File-Package.rar_virtools

    首先,理解“封装VT文件到一个EXE文件”意味着将Virtools项目的所有必要组成部分,包括场景、资源、脚本等,整合到一个单一的可执行文件中。这样做的好处是用户无需安装Virtools软件即可运行应用程序,简化了分发和...

    Virtools开发

    VSL脚本是Virtools中重要的编程手段,通过编写VSL脚本,开发者可以实现更复杂的逻辑和交互功能。 在VSL讲解完毕后,紧接着是SDK开发包的学习。这一部分适合有一定C/C++编程基础的读者,特别是对VC2003编译器和STL、...

    Virtools增强现实专用BB-ARToolkit BB

    2. **虚拟对象定位**:学习如何在Virtools中设置虚拟对象的位置和方向,使其与真实世界的标记对齐,这涉及到空间坐标系的理解和转换。 3. **事件驱动编程**:利用Virtools的事件系统,当标记被检测到或失去追踪时...

    virtools 室内漫游 实例文件 可修改

    virtools 室内漫游 实例文件 可修改 漫游 virtools 室内漫游 实例文件 可修改 漫游

    virtools我的最爱

    它提供了多种方式进行交互式体验的创建,包括VSL(Virtools脚本语言)、脚本流程图以及SDK(软件开发工具包)。 VSL,全称为Virtools Script Language,是一种强大的脚本语言,允许开发者深入到Virtools SDK的底层...

    VirTools教程

    VSL是一种专为Virtools设计的脚本语言,允许程序员深入控制交互逻辑。 4. **渲染引擎** 渲染引擎负责将3D场景转化为可视图像,支持实时预览和最终输出。开发者可以通过SDK定制渲染引擎,以满足特定需求。 5. **...

    3DMax导出到Virtools5.0插件(max2009-2011)

    《3DMax与Virtools交互:3DMax导出到Virtools5.0插件的详细解析》 在三维制作领域,3DMax是一款广泛使用的专业3D建模、动画和渲染软件,而Virtools则是一款强大的交互式3D应用程序开发平台。两者结合,能够实现从3D...

Global site tag (gtag.js) - Google Analytics