我需要解析用户输入的CSV文件并上传所述CSV文件的片段。我想从表中取出前5行,并在此过程中删除它们。
我正在查看Ruby CSV文档,但似乎找不到任何能满足我需求的东西。
我正在寻找类似Hash
delete
方法的东西,但适用于CSV。这对Ruby来说存在吗?
CSV.foreach(csv_path, headers: false).take(5)
这几乎是我想要的,但在此过程中我还需要从表中删除这些行。
创建一个CSV文件进行说明。
File.write('t.csv', <<~END
Now,is,the
time,for,all
good,Rubiests,to
come,to,the
aid,of,their
bowling,team,.
END
)
让我们看看。
puts File.read('t.csv')
Now,is,the
time,for,all
good,Rubiests,to
come,to,the
aid,of,their
bowling,team,.
然后,如果要跳过其索引在范围rng
中的行,
require 'csv'
rng = 1..3
CSV.foreach('t.csv').reject.with_index { |_,i| rng.cover?(i) }
#=> [["Now", "is", "the"],
# ["aid", "of", "their"],
# ["bowling", "team", "."]]
如果需要,请使用select
而不是reject
。
更一般地,如果要跳过索引在数组arr
中的行,则
arr = [1, 3, 4]
CSV.foreach('t.csv').reject.with_index { |_,i| arr.include?(i) }
#=> [["Now", "is", "the"],
# ["good", "Rubiests", "to"],
# ["bowling", "team", "."]]
也可以写以下内容。
arr = [1, 3, 4]
x, y = CSV.foreach('t.csv').partition.with_index { |_,i| arr.include?(i) }
x #=> [["time", "for", "all"], ["come", "to", "the"], ["aid", "of", "their"]]
y #=> [["Now", "is", "the"], ["good", "Rubiests", "to"], ["bowling", "team", "."]]