2012-02-16 84 views
0

我有一個大的csv。我想刪除文件的第一行。這是如何完成的?我不想將每行都複製到一個數組中,並將它們重寫爲先前的索引並刪除第一個。一定會有更好的辦法。 (可能用更快的速度?如何?)如何使用Ruby刪除一行csv文件?

+0

不是一個Rails的具體問題,簡單的格式。 – 2012-02-16 12:03:01

回答

1

喜歡的東西:

source=File::open("source","r") 
dest=File::open("dest","w") 
source.each_line do |line| 
    next if f.lineno == 1 
    dest.write(line) 
end 
source.close 
dest.close 
+0

錯誤,整個源文件被讀入內存提問者想避免。 – 2012-02-16 12:21:40

+0

我的不好,我太快讀了這個問題。這是一個修改後的版本,按行 – 2012-02-16 13:07:56

+2

逐行讀取文件。您沒有關閉文件句柄。明確關閉它們或使用「File.open」的塊形式。 – 2012-02-16 14:14:32

0

將文件複製到另一個文件,省略了要刪除的行。您不必將文件加載到數組中,只需在同一個循環內逐行讀寫即可。

2

如果你不介意炮擊了一個命令行,這是特別有效:

system("tail -n +2 #{input} > #{output}") 
0

你的意思是這樣嗎?

source_path = 'liner.txt' 

open source_path do |input| 
    input.gets 

    open "#{source_path}.header_removed", 'w' do |output| 
    input.each do |line| 
     output << line 
    end 
    end 
end 

但是,這個代碼需要CSV