2010-09-07 40 views
2

我有一個字符串:如何使用Ruby刪除部分CSV字符串?

"116,118,120,130" 

和將要在兩者之間在執行刪除要麼第一,最後或任何價值。

爲了這個我使用:

"116,118,120,130".gsub('118','') 

但問題是字符串包含一個額外unnessesary逗號:

"116,,120,130" 

,如果我用

"116,118,120,130".gsub(',116','') 

它會刪除逗號,但不匹配字符串中的「116」,因爲在「116」前沒有逗號

如何匹配我的字符串的部分可能或我沒有逗號前面的值我正在優雅地刪除?

感謝,

回答

4

嗯,我可能會嘗試像...

"116,118,120,130".split(',').reject{|e|e=="116"}.join(',') 
+0

+1這可能是最簡單的方法來做到這一點。將字符串拆分成一個數組(以逗號分隔),然後刪除任何你不想要的,然後將數組重新組裝成一個逗號分隔的字符串。儘管'gsub'或類似的方法可能會做到這一點,但這種方法似乎不太容易出錯。 – bta 2010-09-07 23:46:59

0

那麼,有兩種簡單的方法來做到這一點。首先,您可以使用正則表達式。一個簡單的如:

"116,118,120,130".gsub(/(,118)|(118,)/,'') 

會做你想做的。隨着118您所尋找的任何價值取代。但是,如果你正在尋找更多的1值,爲什麼不拆分並重新組合。例如

"116,118,120,130".split(',').reject {|val| val == '118' || val == '130'}.join(',') 

返回「116,120」

0

如果是稍微複雜一點的CSV數據(例如,它已經嵌入的逗號),使用csv標準庫模塊

require 'csv' 
str = 'abc,def,"ghi,jlk",mno' 
fields = CSV.parse_line(str) 
fields.reverse! # or do whatever manipulation 
new_line = CSV.generate_line(fields) 
# => "mno,\"ghi,jlk\",def,abc\n"