Как удалить часть строки CSV, используя Ruby? - PullRequest
2 голосов
/ 08 сентября 2010

У меня есть строка:

"116,118,120,130"

и захочет удалить либо первое, последнее, либо любое промежуточное значение после выполнения.

Для этого я использовал:

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

но проблема в том, что строка содержит лишнюю запятую:

"116,,120,130"

и если я использую

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

удалит запятую, но затем не будет совпадать с «116» в строке, так как перед «116» нет запятой

Как я могу сопоставить части моей строки, которые могут иметь или не иметь запятую перед значением, которое я удаляю элегантно?

Спасибо

Ответы [ 3 ]

4 голосов
/ 08 сентября 2010

Хм, я мог бы попробовать что-то вроде ...

"116,118,120,130".split(',').reject{|e|e=="116"}.join(',')
0 голосов
/ 08 сентября 2010

Если данные 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"
0 голосов
/ 08 сентября 2010

Ну, есть два простых способа сделать это.Во-первых, вы можете использовать регулярное выражение.Простой, как:

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

Будет делать то, что вы хотите.118 заменяется на то значение, которое вы ищете.Но если вы ищете более 1 значения, почему бы просто не разделить и рекомбинировать его.Например

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

Возвращает "116 120"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...