LabVIEW數據記錄和存儲(一)—文本文件
盡管ASCII標準使得只含有ASCII字符的文本文件可以在Unix、Macintosh、Microsoft Windows、DOS和其它操作系統之間自由交互,但是在這些操作系統中,換行符并不相同,處理非ASCII字符的方式也不一致。換行(end-of-line, EOL)是一種加在文字字符最后位置的特殊字元,它可以確保后面的下一個字符能夠出現在下一行。ASCII編碼分別使用LF(Line Feed, 0Ah)或CR(Carriage Return, 0Dh)或CR+LF來表示換行(EOL),不同的操作系統處理EOL的方式如下:
- LF:用于Unix或Unix相容系統(GNU/Linux, Mac OS X….),RISC OS;
- CR:Apple Ⅱ家族;
- CR+LF:Windows系統,大部分非Unix操作系統。

圖 1 File I/O選板
本例將從一個數據讀寫的實例中介紹這兩個函數的使用。如圖 2所示,程序將一個二維數組轉換為字符串后寫入到文本文件中,將會自動生成該Test.xls文件(如果已經存在該名稱的文件,將自動覆蓋并不提示用戶)。盡管例子的后綴名使用xls(Microsoft Excel格式),但是實質上是文本文件,使用各種文本編輯工具均可以打開(事實上也可以采用任何自定義格式的后綴名)。

圖 2 Write to Text File
如果需要將現有的數據添加到原有的文本文件中,應該如何處理呢?如圖 3所示,打開文件后使用Set File Position將文件指針移動到文件尾,再寫入數據,并關閉文件。

圖 3 Write to Text File_Append
對比圖 2和圖 3,可以看出,盡管都使用了Write To Text File函數,但是二者的輸入是不一樣的,前者使用路徑而后者使用Refnum。此外,前者只使用了一個函數;而后者還加入了Close File函數。事實上,當使用文件路徑(Path)直接連入(或者為空,此時將彈出路徑選擇對話框)到Write To Text File函數中時,LabVIEW將在執行完該函數時自動文件;但是如果是使用文件句柄(Refnum)連入到該函數或者將函數的輸出句柄連接到了其它的函數,則LabVIEW將認為文件仍然在使用,并不自動關閉。
右擊Write To Text File函數,在彈出菜單中有一個“Convert EOL”菜單項,默認是選中的。當勾選了該選項后,該函數將把所有基于操作系統的EOL字符(行結束符)轉換為LabVIEW EOL符。比如會將單獨的“”和“”轉換成“”行結束符。
圖 4顯示了從Test.xls中讀取數據的實例代碼,使用Read from Text File函數能夠將文本文件中的字符串讀取,程序員可以對這些字符串進行后續的處理,如圖中轉化為Double數組。事實上,Read from Text File也能夠接受路徑和文件句柄兩種輸入方式,當需要只讀取文件的部分字節時就需要使用到句柄操作了。

圖 4 Read from Text File
Read from Text File函數有一個count輸入,表示從文本文件中讀取的字節數(byte),當設置為-1時表示整個文本。此外,在函數的右鍵快捷菜單中選擇“Read Lines”將以行為單位(而不是字節)讀取文本文件。Read from Text File函數同樣也提供了“Convert EOL”選項,此時該函數將把所有基于平臺的行結束符轉換為換行符,如將“”和“”轉換為“”。
【注意】
從Read from Text File函數的count端子可知,該端子為一個I32型整數。當將其它類型的整數連入到該端子時,將自動轉換為I32型整數。如果文件過大,超過了I32的表示范圍,需要分段讀取。
【討論】如何將一個文本文件的內容清空,但是不要將該文件刪除呢?
這個問題似乎是程序員經常遇到的,一個簡單的方式就是使用“Open/Create/Replace File”函數,將operation參數設置為replace and create。但是如果在使用文件的過程中,如何將文件內容清空呢?如圖 5所示。

圖 5 清空已寫入文件的文本
當然可以先將該使用“Close File”函數關閉該文件,再使用“Open/Create/Replace File”函數新建該文件。此外,LabVIEW提供了一種字節控制的方式能夠迅速地清空文件中的內容,如圖 6所示。

圖 6 使用Set File Size函數
毫無疑問,文本文件在數據存儲方面是非常重要的。通用、簡單和易用似乎是最大的優勢,這一點從上面的實例中就可以看出來。但是,從測試測量的數據存儲方面來說,它也有一些缺點。如讀寫速度比較慢慢,不適合于高速數據記錄;文件取址和檢索比較麻煩,無法實現快速定位;當數據量太大時,打開文本文件會非常慢。此外,文本文件無法存儲顏色、富文本、圖像和視頻等多媒體信息。


評論