From: Peter Hickman Date: 2008-05-06T22:54:42+09:00 Subject: Re: trying to create an array with AA-ZZ for dutch postal codes bookie988@gmail.com wrote: > the array postcodes should be filled with strings starting looking > like > > ["AA",AB",AC"..."BA","BB","BC" to "ZZ"] 26*26 entries. > > i've come up with the following to create it, > > postcodes = Array.new > > # create postal codes array > > W = String.new() > X = String.new() > > (A..Z).each do |W| { > > puts W > (A..Z).each do |X| { > postcodes.push("#{W}#{X}") > > } > } > > puts(postcodes) > > this code produces > > hpricot-test.rb:20: syntax error, unexpected tCONSTANT, expecting kDO > or '{' or '(' > hpricot-test.rb:22: odd number list for Hash > hpricot-test.rb:25: syntax error, unexpected '}', expecting kEND > hpricot-test.rb:57: syntax error, unexpected $end, expecting kEND > > what am i doing wrong, is there an easier (rubier) way? > > > Sorry but there are many errors here: First some code that works: postcodes = Array.new ('A'..'Z').each do |x| ('A'..'Z').each do |y| postcodes << "#{x}#{y}" end end puts(postcodes) Note that the A..Z is now 'A'..'Z'. This is because A is a reference to a constant called A which you haven't defined but 'A' is a upper case letter. When doing a xxx.each you can do it either way: ('A'..'Z').each do |x| puts x end or ('A'..'Z').each {|x| puts x } You seem to be mixing both. Your use of W and X as variables. Firstly upper case letters are constants so you can not use them as looping variables. Infact you do not need to predeclare the variables at all.