使用 Ruby 读取 CSV 文件中的空白列

Read a blank column in a CSV file with Ruby

CSV 的一行是:

550012207,1,,,Y,,,,,Y,,

我在做:

product_id_a = data_values[0]
quantity_a = data_values[1]
product_id_b = data_values[5]

每一行都是一个下单场景,有些场景需要将两种产品添加到购物车。我的问题是当只有一项并且第 5 列留空时。

我原来写的是:

if product_id_b == '' || ' '
   do nothing
else
  code to navigate to second product
end

我使用 '' || ' ' 来尝试其中任何一个,因为当我分别尝试它们时,它会忽略 if 而执行 else。然后我写这个只是为了仔细检查:

if product_id_b == ' '
    puts '1'
  elsif product_id_b == ''
    puts '2'
  elsif product_id_b != '' || ' '
    puts 'nothing'
  end

并且输入 "nothing",所以我不知道值是多少。当我这样做时:

  puts product_id_a
  puts product_id_b
  puts quantity_a 

输出

 550012207, , 1

如何识别这个未知值?

使用 p product_id_b 以易于阅读的形式打印值。为此,p 优于 puts。也做 p product_id_b.class 检查它是否是一个 nil 对象。

如果您使用 CSV.parse 进行解析(我希望您这样做),您可以提及空字段将被解析为 nils:

CSV.parse('550012207,1,,,Y,,,,,Y,,')
# => [["550012207", "1", nil, nil, "Y", nil, nil, nil, nil, "Y", nil, nil]]

解决方案:ActiveSupport库(和Rails)给了我们非常方便的方法:.blank?,你可以用它来测试一些值是否为空:empty, consists only from空格或零。

''.blank? # => true
'    '.blank? # => true
nil.blank? # => true
5.blank?   # => false