我生成從紅寶石CSV文件,以及正在接收數據的系統不能接受在底部的空行。Ruby和寫入CSV - 如何避免在最後一個空行?
不過,我已經附加我所有的線(與CRLF爲此)最後一排仍具有CFLF,所以接收系統後,認爲有一個空行鐳石光電。
size = File.size(filename)
File.truncate(filename, size-3)
我丟失的紅寶石CSV一些功能,如果它是最後一行不添加CRLF:
我做這個(的hackish)的代碼來打開並截斷該文件解決它?
我寫的CSV代碼:
csv = CSV.open(filename, "w", {:row_sep => "\r\n"})
.. code to create an array of cols ..
csv << cols
我試着將這個使用字符串,而不是一個文件。但是我沒有成功。我一直使用運算符< <發生錯誤。
更新:原來我有一個錯誤的問題...
這已經有一段時間,但我終於想通了事情的原委。主機系統,我也上傳可以在文件的結尾處理換行符 - 這是Ruby的CSV是把錯誤的換行字符:\ r \ r \ n \ r \ n個instread!如果我把它寫成文本文件,它就是這樣做的。如果我寫作二進制文件,問題就解決了。
萬一別人看到了同樣的問題,這是我的紅寶石:
csv = CSV.open(filename, "w", {:row_sep => "\r\n"}) # actually writes \r\r\n
二進制模式修復它:
csv = CSV.open(filename, "wb", {:row_sep => "\r\n"}) # correctly writes \r\n
在我看來接收系統壞了。 – Arkku 2012-04-21 12:30:25
好點。在我的掌握,但..但我會提出針對它的一個bug, – peterept 2012-04-21 12:37:15
什麼是你的代碼來生成CSV?具體來說,你如何將它寫入文件? – Phrogz 2012-04-21 14:27:00