完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近两天在整一个关于数据转格式的程序,做了几个比较性试验以后写出这样一篇总结贴,希望看贴的各位以后可以避免犯这种奇怪的错误。 1、现在假设有这样个很大的数据文档,前5个字母中包含了一些文字信息,紧接着是两个数字,数字和文字都是我们想要的,那么,应该怎么把这两个东西分别提取呢。这个问题很白痴,很简单,用: open file---->read from text file(5 letters)----->scan from file(%f %fn) 再把后两步循环就可以了。 那么这里做一个有些蛋疼的对比: 经过我实验了一下,这个东西始终在读文件的第一行。 2、那是不是scan 和 read 两个东西不太兼容,传递不畅起的问题呢? 再做一个简单的对比试验,如果这个数据形式更简单,每行都是单纯的“%f %fn”就可以读取的,那么用scan from file加while循环就可以读取所有数据(从头到尾)。 OK,让我再蛋疼一下,上一张图: 这张图中,程序也是一直在读第一行。 3、问题到底出在什么地方,为什么变成了“子Vi”,那个用来传递的refnum就不给力了呢? 我是比较傻一点……然后纠结了很长时间,直到昨天有位前辈粘贴了一段札记上关于“句柄和refnum”的话,引用如下: “由于引用句柄是一个打开对象的临时指针,因此它仅在对象被打开期间有效。如关闭对象, labview 图形化语言会将引用句柄与对象分开,引用句柄随即失效。如再次打开对象,LabVIEW 图形化语言将创建一个与第一个引用句柄不同的新引用句柄。LabVIEW 图形化语言将为打开的 引用句柄指向的对象分配内存空间。关闭引用句柄,该对象就会仍内存中释放。 由于LabVIEW 图形化语言可以记住每个引用句柄所指的信息,如读取或写入的对象的当前地址 和用户访问情况,因此可以对单一对象执行幵行但相互独立的操作。如一个VI 多次打开同一个 对象,那么每次的打开操作都将返回一个不同的引用句柄。VI 结束运行时LabVIEW 图形化语言 会自动关闭引用句柄” 不知道理解的对不对,我是这样理解的,在你把一个东西打包装进一个子vi的时候,运行时,刚开始分配出的句柄会在子vi运行完时被释放掉,这时候循环出去的就不知道是什么东西了。 等循环第二次开始这个子vi时,refnum是新分配的,继续指在文件的最开头,所以就一直在读第一行。 4、为什么要把read +scan 打包呢。 这里随便说一下,免得各位觉得这个东西是我在自找麻烦。 假设你要处理这样的数据(text file): 第一行,包含90%的垃圾字符,但是有这个文件保存的日期 第二行,基本没有用,有一些莫名其妙的十六进制码,但是有数据中包含的东西是那些物理量这样的信息。 之后的行,前面的76个字符没有用,记载的是这行数据测量的时间,不再需要,但是后面是"%f[TAB]%f....."总计24列数据。 经过可能几千行,可能几万行之后。 最后一行的格式也是特殊的。没有任何有用信息,但是形式区别于其他各行,可作为while循环结束的判据。 由于有很多种格式,很多种数据,这时候我就设计了一个子vi, 其输入是“input of refnum”,每次可以读取一行,输出有很多,包括“现在是在读哪个部分”,“文件的测量时间是什么”,“包含24种数据的数组”,“这些数据各是什么”,“output refnum”etc。 中间包含一些case结构,event结构等等。(因为直接把它弄在外部程序里,会显得很累赘,所以我就打包放进子vi了) 就是这个东西,把我折腾了很长时间,调了各种vi property,尝试过global variable(不知道用的对不对),但是就是不成。 今天终于决定不用子vi,累赘点就累赘点,放进去。结果很成功,没有任何问题。 这里算是一点教训,发给大家借鉴一下…… |
|
相关推荐
1 个讨论
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
1613 浏览 1 评论
用udl里的字符串信息在局域网内其他电脑连接sql数据库为什么为出现连接失败拒绝访问?
2167 浏览 2 评论
为什么同一个队列引用的全局变量,运行在两个子vi中发现队列数据丢失了
1797 浏览 0 评论
1979 浏览 0 评论
关于labview2024版本的lvanlys.dll出错的问题
5066 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-2 16:08 , Processed in 0.627157 second(s), Total 49, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号