,elegant

Hiya!

This function adds commas to a string after every three characters
so a number would be easier to read. It's kinda ugly though, and I can't
help thinking there'd be a elegant Why-esque one or two liner to do
this kind of thing - anyone care to improve it?

def add_commas(str)
  return nil if str.class != String

  ret = ""
  len = str.length
  i = len - 1
  while i >= 0
    ret = str[i].chr + ret
    if ((len-i) % 3) == 0
      ret = "," + ret
    end
    i -= 1
  end
  if ret[0].chr == ","
    ret = ret[1..-1]
  end
  ret
end

Does this help?

http://rubyurl.com/EOi

James Edward Gray II

···

On Dec 13, 2005, at 11:24 AM, Leslie Viljoen wrote:

Hiya!

This function adds commas to a string after every three characters
so a number would be easier to read. It's kinda ugly though, and I can't
help thinking there'd be a elegant Why-esque one or two liner to do
this kind of thing - anyone care to improve it?

harp:~ > cat a.rb
   def commafy s
     s.to_s.reverse.scan(%r/.{1,3}/).join(',').reverse
   end

   p(commafy(''))
   p(commafy('4'))
   p(commafy('42'))
   p(commafy('422'))
   p(commafy('4242'))
   p(commafy('42424'))
   p(commafy('424242'))
   p(commafy('4242424'))

   harp:~ > ruby a.rb
   ""
   "4"
   "42"
   "422"
   "4,242"
   "42,424"
   "424,242"
   "4,242,424"

if you want you can play with the pattern so the two reverses aren't needed...
but this is quicker to write :wink:

-a

···

On Wed, 14 Dec 2005, Leslie Viljoen wrote:

Hiya!

This function adds commas to a string after every three characters
so a number would be easier to read. It's kinda ugly though, and I can't
help thinking there'd be a elegant Why-esque one or two liner to do
this kind of thing - anyone care to improve it?

def add_commas(str)
return nil if str.class != String

ret = ""
len = str.length
i = len - 1
while i >= 0
  ret = str[i].chr + ret
  if ((len-i) % 3) == 0
    ret = "," + ret
  end
  i -= 1
end
if ret[0].chr == ","
  ret = ret[1..-1]
end
ret
end

--

ara [dot] t [dot] howard [at] noaa [dot] gov
all happiness comes from the desire for others to be happy. all misery
comes from the desire for oneself to be happy.
-- bodhicaryavatara

===============================================================================

James Edward Gray II wrote:

···

On Dec 13, 2005, at 11:24 AM, Leslie Viljoen wrote:

Hiya!

This function adds commas to a string after every three characters
so a number would be easier to read. It's kinda ugly though, and I can't
help thinking there'd be a elegant Why-esque one or two liner to do
this kind of thing - anyone care to improve it?

Does this help?

http://rubyurl.com/EOi

James Edward Gray II

I knew it! This kind of thing makes me crazy! I used to think I was a good programmer!