我使用了很多CSV文件,其中包含UTF-8字符 - 即中文繁體。我今天碰到的一種特殊情況是,我的CSV文件的標題行非常亂,以至於我需要替換它(我有確切的值來做)。其餘的CSV數據實際上很好。使用ruby格式化CSV的標題行
我想要解決的是如何(使用紅寶石)只需打開有問題的CSV文件,刪除現有的標題行,然後用正確的標題行替換它,而無需加載整個文件。如果我可以做到這一點,而不必處理嚴重格式化的頭文件,它會爲我節省一些嚴重的時間!
我使用了很多CSV文件,其中包含UTF-8字符 - 即中文繁體。我今天碰到的一種特殊情況是,我的CSV文件的標題行非常亂,以至於我需要替換它(我有確切的值來做)。其餘的CSV數據實際上很好。使用ruby格式化CSV的標題行
我想要解決的是如何(使用紅寶石)只需打開有問題的CSV文件,刪除現有的標題行,然後用正確的標題行替換它,而無需加載整個文件。如果我可以做到這一點,而不必處理嚴重格式化的頭文件,它會爲我節省一些嚴重的時間!
CSV文件不是由固定長度的記錄組成的,而是它們通常是由可變長度字符串組成的文件。因此,如果不讀取整個文件,則無法刪除或插入一行。
您可以可以只要更改的內容與舊文本的字節大小完全相同即可,但這種情況不太可能。
相反,我會做這樣的事情:
"w"
模式的新文件。"r"
模式打開舊的(CSV)文件,就好像它是一個文本文件。$.
來查看您是否在第一行。如果是這樣,跳到你的循環結束。$.
大於第一行,請寫下該行。這裏實現了相同的想法,但沒有測試,在Ruby中:
NEW_HEADER = 'some, csv, header'
File.open('new_csv_file', 'w') do |fo|
File.foreach('old_csv_file') do |li|
if $. > 1
fo.puts li
else
fo.puts NEW_HEADER
end
end
end
就像我說的,這不是測試,而是應該讓你開始。
什麼呢$。做?
引述「Ruby編程語言」關於$.
:
從當前輸入文件讀取的最後一行的數字。相當於
ARGF.lineno
。英文同義詞:$NR
,$INPUT_LINE_NUMBER
。
這是一個Perl主題,如果我沒記錯的話,它可能會從shell繼承它。
我們需要看你的努力。對於我們來說,糾正你的代碼比我們寫一些不知道你所做的事情的東西容易得多,然後你試着去修改它。 –
據我所知,在CSV部分寫不可能.. –