On Mar 30, 2007, at 5:39 PM, Timothy Hunter wrote:

> Dustin Anderson wrote:
>> Sorry for the simple question, I just can't figure this out after a
>> couple hours...
>>
>> I need to parse a string:
>>
>> string = column-1:block-0,block-2,block-1,block-3
>>
>> and I need to extract everything before the : (colon) into one  
>> variable
>> (should end up like this:
>> string1 = column-1
>>
>> and then the rest of the string (block-0,block-2,block-1,block3)  
>> into an
>> array...
>>
> I'd use two calls to split:
>
> irb(main):001:0> string = 'column-1:block-0,block-2,block-1,block-3'
> => "column-1:block-0,block-2,block-1,block-3"
> irb(main):002:0> string1, s = string.split(':')
> => ["column-1", "block-0,block-2,block-1,block-3"]
> irb(main):003:0> string1
> => "column-1"
> irb(main):004:0> string2 = s.split(',')
> => ["block-0", "block-2", "block-1", "block-3"]
> irb(main):005:0>
>
> You could probably turn that into a one-liner but that's just golfing.
>

Here's a bit of "live" code that does the same thing (plus .to_f on  
the elements before turning them into a Vector, but you can knock  
that part out yourself)

   def add line
     id, vals = line.split(/:\s*/, 2)
     @labels << id
     @data << Vector[*(vals.split(',').map {|v| v.to_f})]
   end

Note that the second arg (2) to split is important if a ':' can occur  
anywhere in your block-N parts.  Of course, you just need vals.split 
(',')

-Rob

Rob Biedenharn		http://agileconsultingllc.com
Rob / AgileConsultingLLC.com