2011-12-05 257 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)