Rails拆分多个部分的字符串

时间:2016-03-03 21:06:41

标签: ruby csv split

我有一个从csv导入的字符串,例如:

  

2009年8月14日:2009年8月15日,1日,2015年9月16日:1 | Style1,Septh Sep   2015:1 | Style 1

我希望以特定方式将此数据添加到我的数据库中。首先,我将其拆分为,以获取每个日期组(在本例中为4个日期)。

其次,我想要一种方法将每个日期组分成多个部分。第一个是日期,第二个是冒号之后的数字,然后是由|字符分隔的每个项目的更多数量。

在Ruby中有没有一种可行的有效方法来实现这一目标?

寻找像这样的哈希的结果:

{ '14th Aug 2009' => 1, '15th Aug 2009' => 1, '16th Aug 2009' => 1, '16th Sep 2015' => { 1 => 'Style 1' }, '17th Sep 2015' => { 1 => 'Style 1' }

基本上如果字符串是这样的话:

  

2009年8月15日:2015年9月16日:3 | Style1 | Style 1,17th Sep   2015:1 | Style 1

我会得到

{ '15th Aug 2009' => 1, '16th Sep 2015' => { '', 'Style 1', 'Style 1' }, '17th Sep 2015' => { 1 => 'Style 1' }

基本上,由|分隔的文本应该分配给冒号后面的数字。如果数字是3并且后面有两组文本,则一个是空字符串,另外两个将说明文本(例如:“Style 1”。

很抱歉听起来很混乱。

1 个答案:

答案 0 :(得分:1)

我假设你的意思是' |'正如注入要求的那样,separted items来构建一个Array。怎么样?

s ="15th Aug 2009:1, 16th Sep 2015:3|Style1|Style 1, 17th Sep 2015:1|Style 1"
result = {}
s.split(',').each do |v|
  date,rest = v.split(':')
  items = rest.split('|')
  if items[0] == "1"
    result[date] = 1 
  else
    result[date] = ['', items[1..-1]]
  end
end