[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

simple gsub question \' \` what?

Dustin Anderson

3/30/2007 9:20:00 PM

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...

How can I use gsub to extract everything before the colon?

I've looked at the documentation and just can't understand how to use
the \` or \' syntax... I want the two new strings to be:

string1 = column-1
string2 = ["block-0", "block-2", "block-1", "block-3"]

I'm thinking it's something like this:

string.gsub(/:/, "\`")

really, I just don't get it...

the documentation that I'm looking at is here:
http://dev.rubycentral.com/ref/ref_c_s...

thanks a bunch!
-Dustin

--
Posted via http://www.ruby-....

3 Answers

Stefano Crocco

3/30/2007 9:28:00 PM

0

Alle venerdì 30 marzo 2007, Dustin Anderson ha scritto:
> 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...
>
> How can I use gsub to extract everything before the colon?
>
> I've looked at the documentation and just can't understand how to use
> the \` or \' syntax... I want the two new strings to be:
>
> string1 = column-1
> string2 = ["block-0", "block-2", "block-1", "block-3"]
>
> I'm thinking it's something like this:
>
> string.gsub(/:/, "\`")
>
> really, I just don't get it...
>
> the documentation that I'm looking at is here:
> http://dev.rubycentral.com/ref/ref_c_s...
>
> thanks a bunch!
> -Dustin
>

I don't think you need gsub here. gsub is used to replace parts of a string
with other characters. What you need is a regexp. This should work:

string.match( /^([^:]*):(.*)$/ )
string1=$1
string2=$2.split(',')

The regexp will put anything from the beginning of the string until the
first : (excluded) in the global variable $1 and anything after the : in the
variable $2. You can then convert $2 to an array of string using the
String#split method.

I hope this helps

Stefano

Tim Hunter

3/30/2007 9:40:00 PM

0

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.

Rob Biedenharn

3/30/2007 10:31:00 PM

0


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://agileconsult...
Rob@AgileConsultingLLC.com