写在前面
在LabVIEW编程过程中,经常需要读取txt、asc甚至csv等格式的文本文件来输入自己想要的信息。当文本文件比较小时,可能注意不到读取文本所消耗的时间,但是当文本文件高达几万行、几十万行时,读取文本的耗时很显然会影响程序运行体验。面对高达几MB、几十MB甚至上百MB的txt文件,本文介绍可以快速读取文本中最后一行数据的方法。相比于传统方法,可以大幅缩短读取最后一行的时间。
在LabVIEW中,可以采取三种方式读取文本文件,这三种分别为:
- 以电子表格形式读取文本文件,读取后会得到一个二维字符串数据,以换行符为行,以间隔符、空格等设置的符号甄别为列;
- 以字符形式读取文本文件,读取后会得到一个包含该文本全部字符或部分字符的字符串标量;
- 以“行”为单位读取文本文件,读取后会得到一个一维字符串数组,其以换行符作为区分每一个元素。
传统方法读取文本最后一行
在传统的做法中,会用“以电子表格形式读取”和以“行读取”的读取文本文件两种控件来搭获取文本最后一行的程序。下面将展示以这两个控件搭建的程序,同时,为了直观对比,统一采用一个总行数为1553016行、大小为124 MB (130,894,880 字节)的txt文本作为读取对象。
普式1:以电子表格形式获取文本最后一行
采用文件IO/以电子表格形式读取文本控件来搭建的获取文本最后一行的程序,及其运行结果如下:
普式2:以行读取形式读取文本文件获取文本最后一行
在读取文本文件的右键菜单中,使能“行读取”即可进行以行读取文本文件:
以此来获取文本最后一行的程序及其运行结果如下:
获取文本最后一行的快速方法
在上述的传统方法中,获取1553016行的文本的最后一行都耗费了数秒乃至十余秒的时间,这个时间将会极大地影响程序运行的快速性。为此,搭建了如下几种快速获取文本最后一行的程序:
快式1:巧用逆序字符串来获取文本最后一行
快式2:巧用读取位置来获取文本最后一行
快式3:巧用逆序字符串+正则来获取文本最后一行
数据对比
通过上述4种方法都可以获取文本的最后一行,但是所经历的时间是不一样的,另外,其所能获得的其他信息也不尽相同。为此,特列了一个表进行对比:
方式 | 测试样本 | 所消耗的时间 | 其他 | |
---|---|---|---|---|
传统 | 普式1:以电子表格形式获取 | 总行数为1553016行、大小为124 MB (130,894,880 字节)的txt文本 | 5.98 秒 | 可直接获得总行数 |
普式2:以行读取形式获取 | 15.291 秒 | 可直接获得总行数 | ||
快速 | 快式1:巧用逆序字符串来获取 | 1.566 秒 | 不可直接获得总行数 | |
快式2:巧用读取位置来获取 | 0.001 秒 | 需要预判最后一行有多少个字符,且不可直接获得总行数 | ||
快式3:巧用逆序字符串+正则来获取 | 0.677 秒 | 不可直接获得总行数 |
最后
在这里提供上述五种获取文本最后一行的源程序vi:
- 普式1:以电子表格形式获取,点击直达下载页面
- 普式2:以行读取形式获取,点击直达下载页面
- 快式1:巧用逆序字符串来获取,点击直达下载页面
- 快式2:巧用读取位置来获取,点击直达下载页面
- 快式3:巧用逆序字符串+正则来获取,点击直达下载页面
另外,这里提供本人开发的:
- CAN数据文件合并工具CANjoiner的介绍和下载链接:CANjoiner:CAN离线数据文件合并器
- CAN数据离线分析工具X-CAN的介绍和下载链接:CAN报文的离线分析:X-CAN离线分析平台
本文为博主原创文章,未经博主允许不得转载。如有问题,欢迎指正。