Stripping characters off a string

Hi everyone,

I know this is an easy question, but I want to know the best way to do this
(i.e. the most Rubyesque).

How do I strip the last four characters off a string of undetermined length?
I'm sure it is a one liner and doesn't require regexp. I currently have:

irb(main):010:0> a='80/tcp'
=> "80/tcp"
irb(main):011:0> a[0,a.length-4]
=> "80"

irb(main):010:0> b='5666/tcp'
=> "5666/tcp"
irb(main):011:0> b[0,a.length-4]
=> "5666"

Which is two lines, but I'm hoping you smart guys can help me out :wink: I'm
guessing "chop" would work, but I'm not sure if that's the most elegant
solution

Cheers,

Chris

How does:

irb(main):001:0> str = "80/tcp"
=> "80/tcp"
irb(main):002:0> str[0...-4]
=> "80"
irb(main):003:0>

look?
        Hugh

···

On Wed, 22 Oct 2008, Chris Causer wrote:

Hi everyone,

I know this is an easy question, but I want to know the best way to do this
(i.e. the most Rubyesque).

How do I strip the last four characters off a string of undetermined length?
I'm sure it is a one liner and doesn't require regexp. I currently have:

irb(main):010:0> a='80/tcp'
=> "80/tcp"
irb(main):011:0> a[0,a.length-4]
=> "80"

Isn't it like
a = a[0..-5]
is what you are looking for?

···

On Tue, Oct 21, 2008 at 7:28 PM, Chris Causer <chy.causer@gmail.com> wrote:

Hi everyone,

I know this is an easy question, but I want to know the best way to do this
(i.e. the most Rubyesque).

How do I strip the last four characters off a string of undetermined length?
I'm sure it is a one liner and doesn't require regexp. I currently have:

irb(main):010:0> a='80/tcp'
=> "80/tcp"
irb(main):011:0> a[0,a.length-4]
=> "80"

irb(main):010:0> b='5666/tcp'
=> "5666/tcp"
irb(main):011:0> b[0,a.length-4]
=> "5666"

Which is two lines, but I'm hoping you smart guys can help me out :wink: I'm
guessing "chop" would work, but I'm not sure if that's the most elegant
solution

Cheers,

Chris

Brilliant. Thanks Evgeniy, thanks Hugh.

···

On Tue, Oct 21, 2008 at 4:39 PM, Evgeniy Dolzhenko <dolzenko@gmail.com>wrote:

Isn't it like
a = a[0..-5]
is what you are looking for?

your_string = "abcdef" # => "abcdef"
your_string[-4,4] = '' # => ""
your_string # => "ab"

···

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

Does that really work Marc? I always thought that

'string'[a,b]

was to take a substring beginning at a of length b. In your case, you'd just
get the last 4 characters 'cdef'.

···

On Tue, Oct 21, 2008 at 8:11 PM, Marc Heiler <shevegen@linuxmail.org> wrote:

your_string = "abcdef" # => "abcdef"
your_string[-4,4] = '' # => ""
your_string # => "ab"

Chris Causer wrote:

> your_string = "abcdef" # => "abcdef"
> your_string[-4,4] = '' # => ""
> your_string # => "ab"

Does that really work

Yes, it does. If you copy and paste that code into irb, you'll see the exact
output you see above (minus the # plus newlines plus the irb prompt)

I always thought that

'string'[a,b]

was to take a substring beginning at a of length b.

That's right.

In your case, you'd
just get the last 4 characters 'cdef'.

Leaving the characters "ab", which is exactly what he showed in the code
above.

···

--
Jabber: sepp2k@jabber.org
ICQ: 205544826

Ah, now I see. I missed the ='' on the second line.

Thanks Marc and Sebastian, but the range method is particularly alluring :slight_smile:

···

On Tue, Oct 21, 2008 at 11:22 PM, Sebastian Hungerecker < sepp2k@googlemail.com> wrote:

Chris Causer wrote:
> > your_string = "abcdef" # => "abcdef"
> > your_string[-4,4] = '' # => ""
> > your_string # => "ab"
>
> Does that really work

Yes, it does. If you copy and paste that code into irb, you'll see the
exact
output you see above (minus the # plus newlines plus the irb prompt)