Ruby: Howto convert numbers to letters
Let’s say you have a series of numbers (1,2,3,4,5…500+) and you need to convert them to letters like A,B,C,D…AA…ZZ (think Excel column headers.)
I searched and searched to find a built-in way of doing this with Ruby, but I couldn’t find it. So, I tried to write my own:
def number_to_letter(n=1)
n.to_i.to_s(27).tr("0-9a-q", "A-Z")
end
That works great except that 1=B instead of A, so all of AA,AB,AC…AZ doesn’t work. I tried all sorts of different ideas based on the one above. Then, I stumbled on: succ.
For an Integer, it makes a lot sense: 1.succ = 2, and so on (returns the next integer). But, it also does exactly what I need for strings: “A”.succ = “B” and “Z”.succ = “AA”. So, rather than converting numbers to letters, I ended up with a block like this:
column = "A"
(1..500).to_a.each do |i|
puts "#{i} : #{column}"
column = column.succ
end
Filed under: Rails, Ruby | Tagged: number to letter, Ruby