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