寫在前面
在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離線分析平臺
本文爲博主原創文章,未經博主允許不得轉載。如有問題,歡迎指正。