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