[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

general purpose chomp?

Michal Suchanek

5/8/2007 12:12:00 PM

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

4 Answers

Robert Klemme

5/8/2007 12:32:00 PM

0

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 Dober

5/8/2007 12:34:00 PM

0

On 5/8/07, Michal Suchanek <hramrach@centrum.cz> 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

Michal Suchanek

5/8/2007 12:51:00 PM

0

On 08/05/07, Robert Klemme <shortcutter@googlemail.com> 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

Brian Candler

5/8/2007 1:48:00 PM

0

On Tue, May 08, 2007 at 09:33:43PM +0900, Robert Dober wrote:
> On 5/8/07, Michal Suchanek <hramrach@centrum.cz> 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 /^.../