2

我使用下面的代码来读取压缩的 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)。请帮助我继续进行此操作。

4

2 回答 2

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"]
于 2014-10-20T07:20:21.240 回答
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> ...
于 2014-10-20T07:06:12.107 回答