From: Robert Klemme Date: 2007-05-04T17:00:06+09:00 Subject: Re: Is there a better way to do this? On 04.05.2007 02:43, Michael W. Ryder wrote: > As part of my learning Ruby I am trying to learn how to format strings. > The following is an example for formatting a U.S. phone number: > > a = "1234567890" > b = "(000) 000-0000" > ai = 0 > > for i in 0..(b.length) -1 > if b[i,1] == "0" > b[i,1] = a[ai,1] > ai += 1 > end > end > puts b > > Is there a better (more Rubyish) way to do this? > Obviously I will want to add more code in the future to handle > exceptions like phone numbers that are not 10 characters long or are > longer, but this will get me started. I'd start by having the parts of the number separate. Then you can easily use sprintf for the formatting. For example, with Phone = Struct.new(:country, :area, :number) do def to_s sprintf("(%d) %d-%d", country, area, number) end end You can do irb(main):006:0> a = Phone.new 123, 456, 7890 => # irb(main):007:0> puts a (123) 456-7890 => nil irb(main):008:0> You can even add exceptions and special handling if one of the parts is missing etc. If you need leading zeros, that's easy with sprintf as well. Kind regards robert