From: ara.t.howard@... Date: 2005-12-14T02:58:06+09:00 Subject: Re: ,elegant 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 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 ;-) -a -- =============================================================================== | 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 ===============================================================================