使用 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
进行解析(我希望您这样做),您可以提及空字段将被解析为 nil
s:
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
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
进行解析(我希望您这样做),您可以提及空字段将被解析为 nil
s:
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