我使用下面的代码来阅读压缩CSV文件的内容。
Zip::ZipFile.foreach(file) do |entry|
istream = entry.get_input_stream
data = istream.read
#...
end
它为我提供了文本(CSV)文件的全部内容,其中包含以下标题:
NAME AGE GENDER NAME1 29 MALE NAME2 30 FEMALE
但我需要该列的特定数据。例如,我想只显示名称(NAME
)。请帮我解决这个问题。
答案 0 :(得分:5)
虽然您的示例显示了ZipFile,但您确实在问一个CSV问题。首先,您应该查看http://www.ruby-doc.org/stdlib-2.0/libdoc/csv/rdoc/CSV.html
中的文档如果您使用:headers =>解析数据,则会发现如果是true选项,您将获得一个知道如何提取数据列的CSV::table
对象,如下所示。 (由于显而易见的原因,我不会这样编码 - 仅作为示例。)
require 'zip'
require 'csv'
csv_table = nil
Zip::ZipFile.foreach("x.csv.zip") do |entry|
istream = entry.get_input_stream
data = istream.read
csv_table = CSV.parse(data, :col_sep => " ", :headers => true)
end
根据您提供的数据,我们需要`col_sep => " "因为您使用空格作为列分隔符。但现在我们可以做到:
>> csv_table["NAME"] # extract the NAME column
=> ["NAME1", "NAME2"]
答案 1 :(得分:0)
首先,您可以将其用作参考:
http://www.ruby-doc.org/stdlib-2.0/libdoc/csv/rdoc/CSV.html
如果你有一个字符串,你可以做
array = CSV.parse("data")
这将为您提供一组数组,每行一个。 现在,如果您知道每行的第一列是您可以操作该数组的名称,即
array.map { |line| line[0] }.join(",") # returns NAME,<name>,<name>,<name> ...