2011-08-30 78 views
2

我有一個腳本可以將數據從串口轉儲到終端和硬盤。到終端的輸出看起來很好,但是文件在寫入一個^ M之後每一行都會產生一個額外的換行符。從文件輸出中刪除額外的換行符

違規代碼:

# run and dump to file. 
loop { 
    # output data to log file. 
    data = sp.read 
    data.delete!("\C-M") # Removes escape character. 
    if(data != "") 
     puts data 
     File.open($log_file, 'a') { |f| f.write(data) } 
    end 
} 

輸出示例: 在終端:

1 
2 
3 

在文件

1 

2 

3 

編輯:解決方案是運行data.delete !(「\ CM」)在讀取後。

回答

0

我不知道你的串行數據是怎麼樣的,但你總是可以在寫之前在數據變量上做一個chomp。嘗試一下,看看它是如何發展的。

編輯:如果你想刪除^ M,也許你可以嘗試sp.read.tr("\r","")

+0

不起作用。下面是一個評論,額外的換行符是由^ M序列創建的。 Chomp刪除最終的換行符,但對接收到的數據中的其他換行符不做任何處理。 – Kenneth

1

嘗試打開用ruby寫入文件的數據,並讀取。我懷疑你的問題是回車符,有時會導致文件從Windows傳輸到Linux或通過某些郵件客戶端下載文件時出現問題。

+0

我試着在vim打開輸出文件,可以看到每個符合^ M字結尾。顯然,某些過程認爲適合於向每行添加一個「向下滾動窗口一行」字符。 – Kenneth

+0

我想通了,修改了這個問題來反映這個問題。然而,你的評論導致了正確的道路。謝謝。 – Kenneth