LabVIEW Pro 專業論壇-技術討論區-Number To Decimal String自動產生空白和奇怪符號
 
     
 
 
 
LabVIEW 討論區基礎教學每月專題分享技術問題精選online Test
技術討論區 程式分享區 教育訓練與認證區 閒話家常區 工作機會討論區 回報區 ✦LabVIEW NXG 特區✦ 高手專訪系列
 熱門關鍵字 
    3小時內學會 LabVIEW    CLD 考前衝刺    取得 NI 協助    TOP 資源排行榜    量測概念充電站
 您的位置:首頁 > 技術討論區 > Number To Decimal String自動產生空白和奇怪符號
  技術討論區   板主:meiae
 之1(3篇)
Number To Decimal String自動產生空白和奇怪符號 
 
q86643
暱稱:薯條
經驗值:53
等級:技工
發文:4
回文:11
版本:LabVIEW 2014
闖關狀態:
前往地圖:
 
字級設定

各位高手們我又來發問了><,現在我的狀況是我將記事本的檔案讀取後輸出為方波(因為檔案裡面只有0和1),然後再將方波調變和解調後,再看波型跟原本有沒有一樣,到這邊都ok,不過看到圖片紅框這邊,我的目的是要將原本的方波存到記事本,先不考慮調變和解調後會loss或delay而少幾筆資料,我希望方波存成記事本的值(附件out.txt.)會跟原本讀進來的(original.txt)的檔案一樣,不過Number To Decimal String會自己增加空格和一個雖然在記事本上看到是空白,不過貼到word上面看卻是一個奇怪的符號,我用記事本的取代功能把空格砍掉的話要取代兩次,一次是空格,另一次是那個奇怪的符號,我調width也沒辦法讓自動產生的空格不見,只能調整它漂移的位置而已,不知道有沒有大大知道該如何讓它不要產生這兩樣東西?
[+]放大圖片
 
[+]放大圖片
 
[+]放大圖片
 
[+]放大圖片
 

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
附件檔案:    
original01.txt
out01.txt
已解決!轉到解決方案
  文章人氣: 1162 讚:0 文章日期:2018/10/05 06:02
mingyenwei

暱稱:銘延
經驗值:2922
等級:總舵主
發文:6
回文:845
版本:LabVIEW 2013
闖關狀態:
飄渺嶺
前往地圖:
1樓
字級設定

請參考下列ASCII的轉換方式。

 

***1*** 因為你打算畫圖,預期可能有一些正負號計算,所以使用了[I8],

用這個方法存檔時請先用內建VI,將[I8]轉換為[U8]。

 

***2*** 接著

[U8]的49會被轉換為單字元的'1'

[U8]的48會被轉換為單字元的'0'

 

***3***

最重要的是,這個功能會自動幫你把「整數數值的Array」, 自動變成「字元貼在一起的字串」。

省去了Indexing解開與重新Build String的動作。

[+]放大圖片
 
[+]放大圖片
 

 

***4*** 

你多的字元問題是出在Number To Decimal String (數值轉換為十進位制字串顯示) 的時候

他吃的是單個[I8]或[U8]整數,但你送了[I8] Array或[U8] Array

 

這觸動了這顆VI的強迫症,他幫你把每個整數轉換出來的Decimal String都個別放到「字串的Array」中。

在你把「任何」Array To File的時候,他會幫你安排Delimeter (例如逗號 ',' 或 Tab '\t')

這就是你看到的分開原因了。

 

因為這顆VI的孿生雙子VI,主要功能就是用來從有Delimeter的字串文件中,把檔案讀回來形成整數Array,因此這顆VI才會有這樣的症頭。

 

***5***

如果你堅持要使用,請試試看用For Loop把你的Array拆開成單個字,接著再來轉換成String。

Number To Decimal String 底層能用的就是我的方法,因此不要太留戀Number To Decimal String

 

它是專門用來在資料擷取後,產生十進位字串,然後存檔。因此預期的世界都有Delimeter,小數點,甚至科學記號。你要它不做那些東西,它很痛苦的。然後你也會很痛苦的... Orz

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
附件檔案:    
a-009.vi
  版本:LabVIEW 2013
Front Panel
Block Diagram
 
 
    讚:1 文章日期:2018/10/05 10:24
q86643

暱稱:薯條
經驗值:53
等級:技工
發文:4
回文:11
版本:LabVIEW 2014
闖關狀態:
前往地圖:
2樓
字級設定

謝謝mingyenwei大的詳細解說

 

Labview每做一個步驟都要注意彼此型態,而且有時候也不知道現在的型態是什麼,真的有點頭痛

所以我要避免產生間隔的話就要避免使用Number To Decimal String

 

另外想請問mingyenwei大,我在記事本儲存的任何數值或英文字母,即使是記事本裡面只有儲存0和1,在電腦中也是視為字元嗎?實際電腦內部還是在用ASCII跑,將我們看到的0和1轉換為ASCII的48和49在run?因為我當初在將圖片轉成記事本裡的0和1,結果每個0和1都占1個byte,和我當初想的只占1bit落差實在太大,因此我看到記事本的0實際上為00110000(48)和1的00110001(49)的ASCII碼嗎?

    讚:0 文章日期:2018/10/08 14:28
mingyenwei

暱稱:銘延
經驗值:2922
等級:總舵主
發文:6
回文:845
版本:LabVIEW 2013
闖關狀態:
飄渺嶺
前往地圖:
3樓
字級設定

結果每個0和1都占1個byte,和我當初想的只占1bit落差實在太大,因此我看到記事本的0實際上為00110000(48)和1的00110001(49)的ASCII碼嗎?

 

[ASCII ~ Size of String Data Type = 8-bit]

100分! 對的,你在記事本中看到的記事本的0,可以說實際上為00110000(48)和1的00110001(49)的ASCII碼。也就是用String(字串)資料型態去存會佔掉8-bit = 1 Byte(s) (位元組),而不是1-bit(s) (位元)。所以你會覺得資料量比預期的龐大8倍或更多。

 

 

單就容量的問題來說,要儲存1與0資訊,應該使用Boolean (布林)資料型態,True = 1,False = 0。會佔掉1-bit(s) (位元),也就是LabVIEW裡面看到綠綠的T與F。因為你很可能會擁有1維數據或2維圖像,處理過程基本上你的合理選擇資料型態應該會是1-D或2-D Boolean Array。不過你能很順手拿來用的內建VI不是很多,可能還是得自己寫很多For迴圈的資料轉換。

 

如果把轉換成Byte/U8限縮轉換成Boolean,絕大部分都依循0=False,1與其他數值(也就是1~255)被轉換成True這樣的關係。

 

 

 

[ASCII是7-bit還是8-bit?]

這問題目前不太重要,重點是它不是1-bit。

 

因為有一些打字機(String/Character transforming to Computer I/O)的歷史演進,最早ASCII規則的定義是7-bit,裡面還包含了可以讓PC喇叭Beep一聲的 Bell character (ASCII code 7, \a in C),跟一些換行符號,往後才擴展到8-bit。有一些過渡期的字元定義,還有後來的Unicode,都是為了用這些空間去存各式各樣的字元。在你的用途來說,空間都浪費掉了。

https://blog.xuite.net/hem1331.sk/programe/30898769-%E8%AB%8B%E5%95%8F+big5%2C+unicode+and+unicode+UTF-8+%E7%9A%84%E5%B7%AE%E7%95%B0+

http://www.pczone.com.tw/vbb3/thread/47/122399/2/

我不確定7-bit的設計跟當年的一些記憶體的冗碼除錯檢查(CRC-8)有沒有關係,簡單來說就是把前面7個Bit有奇數個1,第8-bit就應該是1,這種資料的自我檢查特性,這種方式可以簡易去除傳輸過程中瞬間雜訊造成的單位元的錯誤。

 

[NotePad]

記事本真的是用1 Byte = 8-bit 去儲存一個字嗎?

其實我也不是很確定,但可以確定的是一定大於8-bit。如果Windows想要存一些特別的東西,那就會更大。

在某個年代的C語言,Character = Byte = U8 = WORD

Character Array = String = Byte Array= U8 Array= WORD Array

後來大家都長胖了,回不去了 XD

 

[Digital Waveform Data Type]

如果你發覺你想要的功能,去google查都要你做Digital Waveform (數位波型) (而不是類比的DBL Waveform),那麼可以針對Digital Waveform去搜尋資訊。現在不適合講太細,這種資料結構沒有比較好用,主要好處是整併多個單通道,變成多通道數位波型,時間軸對齊,訊號起點時間(t0),採樣率 (delta t)變化對時間點的影響。會用這種資料結構是因為NI針對這個主題請數學家/工程師開發了一系列內建VI,想要拿來做類似快速傅立葉轉換(FFT)這類的頻率運算。他們會需要定義出一個結構來把資料餵給已經開發完的Digital Waveform Series VI。你現在應該是用不到的。

    讚:1 文章日期:2018/10/17 12:26
 之1(3篇)
 
 
   會員中心 
帳號:
     
密碼:
     
  以後自動登入
 
註冊
   待回覆文章 
1. 使用ULN-2803 驅動高壓幫浦
 
   Top 5 熱門討論 
1. 如何將矩陣內的指定值取出並累計出現次數?
2. 矩陣中數值極限為何?
3. 使用ULN-2803 驅動高壓幫浦
 
 
 
LabVIEW討論區 站長信箱 關於我們 站內聲明
國家儀器股份有限公司贊助;Sponsored by NI.
© 2010 National Instruments, Taiwan. All rights reserved. design by begonia