本帖最后由 荣琪 于 2022-1-20 23:35 编辑
荣小菜补钙记第19期:数据操作之变体数据提取 同步更新于 WeChat:荣小菜在补钙 大家好,我是荣小菜,也可以叫我Richie,今天分享一个将变体中数据按名称和数据类型提取出来的Demo。 1. 背景 变体一种优劣并存的数据类型,直接引用labview帮助文档中对变体的说明:有些情况下,可能需要VI以通用的方式处理不同类型的数据。可为每种数据类型各写一个VI,但是,有多个副本的VI,如有变动,较难维护。为此,LabVIEW提供了变体数据作为解决方案。 变体数据类型用于须保证不受数据类型影响的数据操作,如数据的传输或保存,对未知设备的读写,或对几组不同控件的操作等。 变体虽然具有以上优点,但是我们终归是要将其转换为正常的数据类型。LabVIEW帮助文档提供了一种简单的方法。很明显,这种方法要求我们必须保证转换前后的数据结构不能改变,即“字符串->变体->字符串”。
这种方法要求我们必须知道在运行的代码中的数据结构,虽然使用类继承的方法能够根据不同的数据结构构建不同的数据处理方式。但这归根结底还是要求我们知道有哪些数据结构,数据结构越多,代码复杂度越高,遇到数据结构需要变化时维护承本越大。
因此,如果我们制作一个工具,只要提供数据名称和数据类型,如果存在,就能将变体这个盒子中对应的数据取出来。那么我们就可以不用管这个变体整体是什么数据结构,需要数据结构中的子数据时也不用再将其先全部转换出来再提取子数据了。这就能降低数据结构管理难度,减少因为数据结构变动引起的改动。 2. 变体数据提取Demo 讲了这么多,直接上Demo,在这里我们预设了不断变化的簇(含各种元素)和单一的数据结构(字符串、布尔等),将其转换为变体,再通过我们写的提取函数将其转换出来。这就让我可以不管变体有哪些数据结构,只是尝试扔进去“数据名”和“数据类型”,看看能不能“吐”出来有效数据。
当然,这种方式缺点也很明显(也是使用变体的缺点):必须运行才能知道有无错误。若是团队中有人没有遵守编程规范造成数据结构失控,就。。。。 3. 获取变体中元素类型和名称 Demo的实现主要依赖两个核心Vi,第一个是“获取数据类型和名称”Vi,其代码如下,使用递归查询方式,代码就比较简单了。
4. 获取变体全部子元素 第二个核心Vi是“获取变体全部子元素”Vi,也是利用递归,结合“平化/还原字符串”,将变体元素一个个提取出来组成变体数组。
5. 总结 本期分享了一个自由提取变体内部数据的Demo,希望对大家有所帮助,也希望能和大家多多讨论数据结构的设计和管理方面的知识,共同进步。^_^ 可惜的是目前该Demo还没有实现对变体中数组的提取。一个是由于数组元素多样,想全面覆盖个人感觉有些困难,另一个是不建议将大数据转来转去,会大大降低执行效率。
|