<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > LabVIEW數(shù)據(jù)記錄和存儲(chǔ)(一)—文本文件

          LabVIEW數(shù)據(jù)記錄和存儲(chǔ)(一)—文本文件

          作者: 時(shí)間:2017-01-09 來源:網(wǎng)絡(luò) 收藏
          文本文件是由若干行字符構(gòu)成的計(jì)算機(jī)文件,根據(jù)本文儲(chǔ)方式的不同有多種格式,如doc、txt、inf等。通常所指的文本文件是指能夠被系統(tǒng)終端或者簡(jiǎn)單的文本編輯器中接受的格式,可以認(rèn)為這種文件是通用的、跨平臺(tái)的。對(duì)通用的英文文本文件而言,ASCII碼是最為常見的編碼標(biāo)準(zhǔn);而如果需要存儲(chǔ)帶重音符號(hào)的英文或其它的非ASCII字符,則必須選擇一種字符編碼,如UTF-8。
          盡管ASCII標(biāo)準(zhǔn)使得只含有ASCII字符的文本文件可以在Unix、Macintosh、Microsoft Windows、DOS和其它操作系統(tǒng)之間自由交互,但是在這些操作系統(tǒng)中,換行符并不相同,處理非ASCII字符的方式也不一致。換行(end-of-line, EOL)是一種加在文字字符最后位置的特殊字元,它可以確保后面的下一個(gè)字符能夠出現(xiàn)在下一行。ASCII編碼分別使用LF(Line Feed, 0Ah)或CR(Carriage Return, 0Dh)或CR+LF來表示換行(EOL),不同的操作系統(tǒng)處理EOL的方式如下:
          1. LF:用于Unix或Unix相容系統(tǒng)(GNU/Linux, Mac OS X….),RISC OS;
          2. CR:Apple Ⅱ家族;
          3. CR+LF:Windows系統(tǒng),大部分非Unix操作系統(tǒng)。
          LabVIEW中的文本文件讀寫采用圖 1所示的兩個(gè)函數(shù)完成:“Write To Text File”和“Read From Text File”。這兩個(gè)函數(shù)是多態(tài)函數(shù),可以接受File Refnum和File Path兩種輸入。

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


          圖 2 Write to Text File
          如果需要將現(xiàn)有的數(shù)據(jù)添加到原有的文本文件中,應(yīng)該如何處理呢?如圖 3所示,打開文件后使用Set File Position將文件指針移動(dòng)到文件尾,再寫入數(shù)據(jù),并關(guān)閉文件。


          圖 3 Write to Text File_Append
          對(duì)比圖 2和圖 3,可以看出,盡管都使用了Write To Text File函數(shù),但是二者的輸入是不一樣的,前者使用路徑而后者使用Refnum。此外,前者只使用了一個(gè)函數(shù);而后者還加入了Close File函數(shù)。事實(shí)上,當(dāng)使用文件路徑(Path)直接連入(或者為空,此時(shí)將彈出路徑選擇對(duì)話框)到Write To Text File函數(shù)中時(shí),LabVIEW將在執(zhí)行完該函數(shù)時(shí)自動(dòng)文件;但是如果是使用文件句柄(Refnum)連入到該函數(shù)或者將函數(shù)的輸出句柄連接到了其它的函數(shù),則LabVIEW將認(rèn)為文件仍然在使用,并不自動(dòng)關(guān)閉。
          右擊Write To Text File函數(shù),在彈出菜單中有一個(gè)“Convert EOL”菜單項(xiàng),默認(rèn)是選中的。當(dāng)勾選了該選項(xiàng)后,該函數(shù)將把所有基于操作系統(tǒng)的EOL字符(行結(jié)束符)轉(zhuǎn)換為L(zhǎng)abVIEW EOL符。比如會(huì)將單獨(dú)的“”和“”轉(zhuǎn)換成“”行結(jié)束符。
          圖 4顯示了從Test.xls中讀取數(shù)據(jù)的實(shí)例代碼,使用Read from Text File函數(shù)能夠?qū)⑽谋疚募械淖址x取,程序員可以對(duì)這些字符串進(jìn)行后續(xù)的處理,如圖中轉(zhuǎn)化為Double數(shù)組。事實(shí)上,Read from Text File也能夠接受路徑和文件句柄兩種輸入方式,當(dāng)需要只讀取文件的部分字節(jié)時(shí)就需要使用到句柄操作了。


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


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


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


          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();