From: dblack@... Date: 2007-07-20T17:13:56+09:00 Subject: Re: Is there a replacement for sub? Hi -- On Fri, 20 Jul 2007, Robert Klemme wrote: > 2007/7/20, Michael W. Ryder <_mwryder@worldnet.att.net>: >> Chris Shea wrote: >> > On Jul 19, 8:59 pm, "Michael W. Ryder" <_mwry...@worldnet.att.net> >> > wrote: >> >> I was trying to come up with a way to remove x instances of a character >> >> from a string and came up with a problem. If I enter: >> >> >> >> a = "a b c d e f" >> >> for i in 1..3 >> >> a = a.sub!(' ', '') >> >> end >> >> puts a ==> returns 'abcd e f' which is correct. >> >> >> >> But if I enter: >> >> >> >> a = "a b c d e f" >> >> for i in 1..10 >> >> a = a.sub!(' ', '') >> >> end >> >> puts a ==> returns error.rb:3: private method `sub!' called for >> >> nil:NilClass (NoMethodError, and a is now nil. >> >> >> >> What I am looking for is a way to remove the first n instances of a >> >> blank from the string without wiping out the string if it does not >> >> contain at least n blanks. I assume there is a way to do this with >> >> regular expressions, but have not found it yet. This is something an >> >> editor I liked, UCEDIT, on the CDC Cyber had in the 70's. >> > >> > sub! modifies the string in place, so you don't need to say a = a.sub! >> > (' ',''). a is already changing. And since sub! is modifying in >> > place, it returns nil if no changes are being made, and you end up >> > setting a to nil when that happens. >> > >> > a = 'a b c d e f' >> > 10.times { a.sub!(' ','')} >> > puts a # 'abcdef' >> > >> > HTH, >> > Chris >> > >> >> I think this is where I am having problems understanding Ruby. I have >> to use a.sub(' ', '') in a for loop but use a.sub!(' ', '') when using a >> times loop. Why the difference? > > There is none. a.sub! is an alternative to a = a.sub - wherever you use it. a.sub! will modify the same string, though, whereas a = a.sub changes the binding of 'a' to a new string. (Which you probably didn't mention because it doesn't matter in a given case, but could be misunderstood out of context :-) David -- * Books: RAILS ROUTING (new! http://www.awprofessional.com/title/0321509242) RUBY FOR RAILS (http://www.manning.com/black) * Ruby/Rails training & consulting: Ruby Power and Light, LLC (http://www.rubypal.com)