[教學] 三種進階 File I/O 技術

在這邊介紹三種 Advanced File I/O Techniques
或許在 LabVIEW 8.x 已經提供了這方面的整合 vi 給予使用,
但是在 LabVIEW 7.x 以前的使用者來說,如果有這些需要的話,還是可以參考一下。

另外還有很多其它的寫檔設計技術,比方說寫入 waveform、configuration 等等,
這些大家可以參考 LabVIEW 本身所提供的 PDF 檔 (lvuser.pdf)

 

 

  • 第一種是「Text File I/O」:Text File IO VIs.rar
    這是大家最常使用的一種寫入文字檔的程式設計技巧。

 

  • 優點:
    1. 為人們可閱讀的
    2. 檔案具備 跨程式、作業平臺 之能力

 

  • 缺點:
    1. 佔用較大的儲存空間
    2. 讀、寫速度較慢
    3. 程式執行佔用較多記憶體空間
    4. 無法執行 Random access 的讀、寫 (註)
    5. 在儲存 numeric 資料時,可能會遺失掉精準度

 

  • Text File Writer
    一開始,我們開啟或是建立新的文字檔,取得該文字檔的 Refnum 來做寫入的動作,
    之後在 close 掉 Refnum,以儲存資料。

![](upload://2KD4PoN6umD0UvJHEGBCcLV3nrB.jpeg)

  • Text File Reader
    一開始,開啟即有的文字檔,並取得 file size,送給「Read File.vi」,
    來正確取得文字檔內容。
    注意! 如果此一 file size 未告知「Read File.vi」,則不能正確知道檔案
    內容結尾在哪裡,也會因此而無法正確讀取到內容。

![](upload://gHHeKYHKmaOFTPBVg4SVOFc86oe.jpeg)

 

Airbolt38995.4941898148
  • 第二種是「Binary File I/O」:Binary File IO VIs.rar
    這在其它的開發程式可能還滿常使用的,但是在 LabVIEW 的使用似乎很少見。

 

  • 優點:
    1. 佔用最少的儲存空間
    2. 讀、寫速度最快
    3. 執行期間佔用最少的記憶體
    4. 可執行 Random access 的讀、寫 (註)
    5. 在儲存 numeric 資料時,可以保留精準度

 

 

  • Binary File Writer 第一種設計法 (寫入的設計法共有兩種):
    要特別注意的一點是在檔案一開始的地方,我們要先寫入 "檔頭",
    這些檔頭是用來記載之後所寫入的檔案內容所「佔用的空間」、「Data Type」
    為何?

    以底下寫入 2D Array (DBL) 來說,
    我們先寫入第一維 Row 的大小,再寫入第二維 Column 的大小,
    最後才寫入真正的資料。

![](upload://9Uc51VDnyo7IuGmRIXM29TPkE97.jpeg)

 

  • Binary File Writer 第二種設計法 (寫入的設計法共有兩種):
    第二種方法較為簡單、便利些,只需要在「Writer File.vi」的接腳 "head (F) "
    給予 True 值,即可寫入 "檔頭"

![](upload://9IVFrDmIOIFNr2iMeVIPLBKKuhB.jpeg)

 

  • Binary File Reader
    在「Read File.vi」上的接腳 "byte stream type" 給予指定的 Data Type,
    這樣才在 output 接腳 "data"上,得到正確 Data Type 的輸出

![](upload://pQhD8yK6ZS5nU0HI7VcGxS0biPG.jpeg)

Airbolt38995.4935069444
  • 第三種是「Datalog File I/O」:Datalog File IO VIs.rar
    通常是用來 儲取 LabVIEW 人機介面上的複雜且量多的 controller 上頭的
    資料。

 

  • 優點:
    1. 快速且容易來 儲取 複雜 的資料型態,比如,Cluster
    2. 可執行 Random access 的讀、寫 (註)

 

  • 缺點:
    1. 只有 LabVIEW 能夠 儲取

 

  • 通常我們會搭配 Type Def. 的 Controller 來定義這些在 Datalog File I/O
    中所使用的 Data Type。

 

  • Datalog File Writer
    在「New File.vi」的接腳 "datalog type" 上,給予將要寫入的 Data Type,
    如此一來,才能建立並輸出  Datalog 的 "refnum",而檔案也才能寫入正確的
    Data Type。

    平常「New File.vi」的接腳 "datalog type" 不接時,只是一般建立新檔的動作。

![](upload://nstsWh4Ph634qbQWYGh72pxQ2Ln.jpeg)

![](upload://omtIa5C1DF4jSgfMRcWRzxDWxm6.jpeg)

 

  • Datalog File Reader
    在「Open File.vi」的接腳 "data type",同樣要給予指定的 Data Type,
    這樣開啟、輸出 Datalog 的 "refnum",而讀出的資料才會是正確的 Data Type。

    平常「Open File.vi」的接腳 "datalog type" 不接時,只是一般開啟舊檔的動作。

![](upload://onCfHpVty6SLH0Ig47ROesY26HF.jpeg)

![](upload://vOQPVMvf0jxbrTQeAGhR81cr79J.jpeg)

Airbolt38995.4964467593
  • 註:
    Random Access:Able to directly access any portion of data,
    without having to accept data in sequence.

感謝Airbolt精彩的教學,我已收藏本文

 

PS.提醒一下Airbolt可否將圖示加上浮水印,以免被盗圖

ancle38995.4600115741

謝謝 ancle 的提醒,我已經為圖檔加上了簽名,
一方面提倡智慧財產,另一方面也跟大家示範一下如何來保障自身的權利。

(不過這是我第一次為圖檔加上簽名,如果有防礙閱讀,或是更好的方式,
請不吝告知我,謝謝。)

建議Airbolt參考以下方式,謝謝!

![](upload://8iYZzFXkXwGsouMCIo6E5618Kne.jpeg)

ancle38995.512037037

Binary file I/O還有另一個好處是在跨語系的OS下不會出問題. 譬如說你的檔案有中文字,在英文 or 法文版OS 執行時可能會有問題. 這是我之前遇到的問題.