1

我有一个如下所示的 CSV 文件:

Jenny, jenny@example.com ,
Ricky, ricky@example.com ,
Josefina josefina@example.com ,

我试图得到这个输出:

users_array = [
['Jenny', 'jenny@example.com'], ['Ricky', 'ricky@example.com'], ['Josefina', 'josefina@example.com']
]

我试过这个:

users_array = Array.new

file = File.new('csv_file.csv', 'r') 
file.each_line("\n") do |row| 
    puts row + "\n" 
    columns = row.split(",") 
    users_array.push columns 
    puts users_array
end 

不幸的是,在终端中,这会返回:

Jenny
jenny@example.com
Ricky
ricky@example.com
Josefina
josefina@example.com

我认为这不起作用:

users_array.each_with_index do |user|
    add_page.form_with(:id => 'new_user') do |f|
      f.field_with(:id => "user_email").value = user[0]
      f.field_with(:id => "user_name").value = user[1]
    end.click_button
end

我需要改变什么?或者有没有更好的方法来解决这个问题?

4

2 回答 2

1

Ruby 的标准库有一个CSV类,其 api 类似,File但包含许多处理表格数据的有用方法。要获得您想要的输出,您需要做的就是:

require 'csv'
users_array = CSV.read('csv_file.csv')

PS - 我认为您也可以通过文件解析获得预期的输出,但您可能会被它打印到终端的方式所迷惑。puts数组的行为不同,将每个成员对象打印在新行上,而不是作为单个数组。如果要将其视为数组,请使用puts my_array.inspect.

于 2013-06-20T00:06:22.740 回答
0

假设您的 CSV 文件在第三行的名称和电子邮件地址之间实际上有一个逗号:

require 'csv'

users_array = []
CSV.foreach('csv_file.csv') do |row|
  users_array.push row.delete_if(&:nil?).map(&:strip)
end

users_array
# => [["Jenny", "jenny@example.com"],
#     ["Ricky", "ricky@example.com"],
#     ["Josefina", "josefina@example.com"]]

可能有一种更简单的方法,但我正在做的是丢弃nil由尾随逗号创建的字段并stripping 电子邮件地址周围的空格。

于 2013-06-20T00:09:30.953 回答