2011-12-05 66 views
2

我正在解析一个带有nokogiri的html页面并提取一些数据点。这似乎提取正确的数据点,而且还提取空值和逗号,这里有最新提取的样品:遍历数组并删除某些字符串元素

null, 
3.28, 
null, 
null, 
null, 
1.91, 
2.83, 
null, 
9.06, 
null, 
3.80, 
6.42, 
null, 

我希望能够删除逗号的所有实例“空”,以及一般然后将每个元素转换为一个浮点数。上述似乎并没有删除“null”。

+1

做一个'array.inspect'来检查非打印字符。或者将'x =='空,''改为'x =〜/ null。* $ /' – karatedog

回答

3

你可能只是这样做:

array.reject{|x|x =~ /null/}.map(&:to_f) 
+0

即使这样做似乎也不起作用,还有更多我得到未定义的[“null”]数组的方法to_f。这可能是什么? – Sun

+1

在那里添加一个flatten:array.flatten.reject ... – pguardiario

+0

仍然是同样的问题,它不会抛出错误,但它也不会摆脱null部分。 – Sun

1

在这里你去:

input = <<INPUT 
null, 
3.28, 
null, 
null, 
null, 
1.91, 
2.83, 
null, 
9.06, 
null, 
3.80, 
6.42, 
null, 
INPUT 

result = input.split.map(&:to_f) 
=> [0.0, 3.28, 0.0, 0.0, 0.0, 1.91, 2.83, 0.0, 9.06, 0.0, 3.8, 6.42, 0.0] 
result.delete(0.0) 
=> 0.0 
result 
=> [3.28, 1.91, 2.83, 9.06, 3.8, 6.42] 
+1

这也会删除可能在输入 – pguardiario

+1

为真的任何0。但OP没有声称,他需要零:) – kyrylo

+1

他并没有声称他需要四或五。我认为代码应该处理它们。 – pguardiario

0

不包括逗号(注意正则表达式中的括号内):

data1 = inline.to_s().scan(/y: (.*?)\,/) 

结果:

result = data1.reject{|item| item == "null"}.map(&:to_f)