2012-02-16 88 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