general purpose chomp?

Discussion in 'Ruby' started by Michal Suchanek, May 8, 2007.

  1. I wonder why we do not have one. Or maybe I just overlooked something?

    class String
    def lstripc c = ' \r\t\n'
    c = c.chr if c.kind_of? Integer
    idx = 0
    while c.include? self[idx]
    idx += 1
    end
    self[idx..-1]
    end
    end

    Thanks

    Michal
    Michal Suchanek, May 8, 2007
    #1
    1. Advertising

  2. On 08.05.2007 14:11, Michal Suchanek wrote:
    > I wonder why we do not have one. Or maybe I just overlooked something?
    >
    > class String
    > def lstripc c = ' \r\t\n'
    > c = c.chr if c.kind_of? Integer
    > idx = 0
    > while c.include? self[idx]
    > idx += 1
    > end
    > self[idx..-1]
    > end
    > end


    irb(main):016:0> s = "\r\n\tfoo"
    => "\r\n\tfoo"
    irb(main):017:0> s.lstrip!
    => "foo"
    irb(main):018:0> s
    => "foo"

    If you want more control, the "general purpose" methods would be sub,
    sub!, gsub and gsub!:

    irb(main):001:0> s = "\r\n\tfoo"
    => "\r\n\tfoo"
    irb(main):002:0> s.sub! %r{\A[\r\n\s]+}, ''
    => "foo"
    irb(main):003:0> s
    => "foo"

    irb(main):009:0> s = "\r\n\tfoo"
    => "\r\n\tfoo"
    irb(main):010:0> s.sub! %r{\A\s+}, ''
    => "foo"
    irb(main):011:0> s
    => "foo"

    Regards

    robert
    Robert Klemme, May 8, 2007
    #2
    1. Advertising

  3. Michal Suchanek

    Robert Dober Guest

    On 5/8/07, Michal Suchanek <> wrote:
    > I wonder why we do not have one. Or maybe I just overlooked something?
    >
    > class String
    > def lstripc c = ' \r\t\n'
    > c = c.chr if c.kind_of? Integer
    > idx = 0
    > while c.include? self[idx]
    > idx += 1
    > end
    > self[idx..-1]
    > end
    > end
    >
    > Thanks
    >
    > Michal
    >
    >

    Some random thoughts
    * Chomp strips on the RHS of the string, right?
    * Sometimes I would just use sub /^<clever rgx>/, "" (or a potential
    #delete as suggested in my RCR idea ;)
    * I feel rgxs should be accepted as params
    * I do not like the use a string with character set semantics (again
    kindly have a look at the RCR thread where somebody smarter than me
    has made a very good point about this).

    That all said, this might actually be a nice feature to have, but
    maybe there are just to many methods there, already doing *almost* the
    same.
    This is basically one of the reasons against my RCR idea too.

    Cheers
    Robert


    --
    You see things; and you say Why?
    But I dream things that never were; and I say Why not?
    -- George Bernard Shaw
    Robert Dober, May 8, 2007
    #3
  4. On 08/05/07, Robert Klemme <> wrote:
    > On 08.05.2007 14:11, Michal Suchanek wrote:
    > > I wonder why we do not have one. Or maybe I just overlooked something?
    > >
    > > class String
    > > def lstripc c = ' \r\t\n'
    > > c = c.chr if c.kind_of? Integer
    > > idx = 0
    > > while c.include? self[idx]
    > > idx += 1
    > > end
    > > self[idx..-1]
    > > end
    > > end

    >
    > irb(main):016:0> s = "\r\n\tfoo"
    > => "\r\n\tfoo"
    > irb(main):017:0> s.lstrip!
    > => "foo"
    > irb(main):018:0> s
    > => "foo"
    >
    > If you want more control, the "general purpose" methods would be sub,
    > sub!, gsub and gsub!:
    >
    > irb(main):001:0> s = "\r\n\tfoo"
    > => "\r\n\tfoo"
    > irb(main):002:0> s.sub! %r{\A[\r\n\s]+}, ''
    > => "foo"
    > irb(main):003:0> s
    > => "foo"
    >
    > irb(main):009:0> s = "\r\n\tfoo"
    > => "\r\n\tfoo"
    > irb(main):010:0> s.sub! %r{\A\s+}, ''
    > => "foo"
    > irb(main):011:0> s
    > => "foo"
    >


    Yes, sub! is the thing that would do chomp for things other than \r\n\t.
    Not as easy but it surely works.

    Thanks

    Michal
    Michal Suchanek, May 8, 2007
    #4
  5. On Tue, May 08, 2007 at 09:33:43PM +0900, Robert Dober wrote:
    > On 5/8/07, Michal Suchanek <> wrote:
    > >I wonder why we do not have one. Or maybe I just overlooked something?
    > >
    > >class String
    > > def lstripc c = ' \r\t\n'
    > > c = c.chr if c.kind_of? Integer
    > > idx = 0
    > > while c.include? self[idx]
    > > idx += 1
    > > end
    > > self[idx..-1]
    > > end
    > >end
    > >
    > >Thanks
    > >
    > >Michal
    > >
    > >

    > Some random thoughts
    > * Chomp strips on the RHS of the string, right?
    > * Sometimes I would just use sub /^<clever rgx>/, ""


    Except that would be wrong in this case, since it wouldn't only chomp from
    the left-hand side of the string.

    Use /\A.../ not /^.../
    Brian Candler, May 8, 2007
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Robert Bj?rn
    Replies:
    0
    Views:
    420
    Robert Bj?rn
    Jun 1, 2004
  2. Maarten van Reeuwijk

    Looking for very simple general purpose tokenizer

    Maarten van Reeuwijk, Jan 19, 2004, in forum: Python
    Replies:
    6
    Views:
    383
  3. Ron Stephens
    Replies:
    23
    Views:
    2,834
    Ron Stephens
    Apr 12, 2004
  4. Donald Newcomb

    NEWB: General purpose list iteration?

    Donald Newcomb, Aug 12, 2005, in forum: Python
    Replies:
    4
    Views:
    315
    Donald Newcomb
    Aug 12, 2005
  5. martin
    Replies:
    3
    Views:
    179
    Joe Smith
    Apr 15, 2006
Loading...

Share This Page