,elegant


#1

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


#2

On Dec 13, 2005, at 11:24 AM, Leslie V. 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 G. II


#3

James Edward G. II wrote:

Does this help?

http://rubyurl.com/EOi

James Edward G. II

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


#4

On Wed, 14 Dec 2005, Leslie V. wrote:

if ret[0].chr == “,”
ret = ret[1…-1]
end
ret
end

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