General purpose chomp?


#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


#2

On 08.05.2007 14:11, Michal S. wrote:

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


#3

On 5/8/07, Michal S. removed_email_address@domain.invalid wrote:

end
end

Thanks

Michal

Some random thoughts

  • Chomp strips on the RHS of the string, right?
  • Sometimes I would just use sub /^/, “” (or a potential
    #delete as suggested in my RCR idea :wink:
  • 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


#4

On Tue, May 08, 2007 at 09:33:43PM +0900, Robert D. wrote:

self[idx…-1]

  • Sometimes I would just use sub /^/, “”
    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 /^…/


#5

On 08/05/07, Robert K. removed_email_address@domain.invalid wrote:

self[idx…-1]
If you want more control, the “general purpose” methods would be sub,
=> “\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