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
并且它没有"没有",所以我不知道它的价值是什么。当我这样做时:
puts product_id_a
puts product_id_b
puts quantity_a
输出
550012207, , 1
如何识别此未知值?
答案 0 :(得分:0)
使用p product_id_b
以易于阅读的形式打印值。为此目的,p
优于puts
。同时执行p product_id_b.class
以检查它是否为nil
对象。
答案 1 :(得分:0)
如果您已使用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?
,您可以使用它来测试某些值是否为空:空,仅由空格或零组成。
''.blank? # => true
' '.blank? # => true
nil.blank? # => true
5.blank? # => false