From: Robin Stocker Date: 2006-01-09T19:27:41+09:00 Subject: Re: simple match of items in 2 arrays Hi, You can use the CSV module. As Christer already pointed out, you have errors in your CSV file. Robin require 'csv' require 'yaml' zips = {} ziplookup = CSV.parse(File.read('ziplu'), ', ') zipdata = CSV.parse(File.read('zipdata'), ', ') zipdata.each do |data| zip_code = data.first h = {} zips[zip_code] = h h[:frequency] = data[1].to_i lookup = ziplookup.find{ |lookup| lookup.first == zip_code } next unless lookup # something like this: h[:lat] = lookup[1].gsub(',', '.').to_f h[:long] = lookup[2].gsub(',', '.').to_f h[:city] = lookup[3] end y zips Charles L. Snyder wrote: > Hi > > Inexperienced ruby user question: > > I have 2 large csv files: > 1) Zipdata = basically a frequency table of zipcodes: > 02115, 10 > 64108, 9 > 99234, 8 etc > > 2) Ziplookup (ziplu) = several column table of data assoc with > zipcodes: > 02115, +43.59906, -75,99343, Hoboken, NJ, Johnson Cty > 55021, +55.5454, - 64,8585, Kansas City, MO, Jackson Cty > > I am trying to take each entry in the zipdata and compare the zipcode > to the lookup table > When a match is found, combine the data into a new line / > multidimensional hash table eg - > 02115, 10, +43.59906, -75,99343, Hoboken, NJ, Johnson Cty > > Here is what I have: > outf = File.read "ZIP_CODES.txt" > ziplu=[] > zipdata = [] > result = [] > > outf.each {|e| ziplu.push e.chomp} > > # open the csv file of zip code occurences and their frequency (zips), > and add each zipcode to an array (zipdata) > doc = File.read "zips.txt" > doc.each {|f| zipdata.push f} > > #compare each line from zipsdata to the lookup file and put into new > array > result.push(zipdata.each {|a| ziplu.find_all{|x| /a/ =~ x}) > > I can't get the comparison to work, and don't know what format to put > the result into (hash, array of arrays, file) - from which I can > easily output the results (ie., lat long, city, state) by zipcode... > > Any guidance appreciated.. > > CLS