From: aleister Date: 2008-05-06T23:05:03+09:00 Subject: Re: trying to create an array with AA-ZZ for dutch postal codes On May 6, 3:54 pm, Peter Hickman wrote: > bookie...@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. thanx