2008/2/6, Vell <lovell.mcilwain / gmail.com>: > On Feb 5, 10:00 pm, Vell <lovell.mcilw... / gmail.com> wrote: > > I am trying to create a script that will allow me to compare email > > addresses with a list of domains to see if they match. If they don't > > match then everything is good to go, but if they do match, I want to > > be able to delete them or move them out of the list. > > > > The code that I wrote gives the following when its ran: > > TypeError: type mismatch: String given > > > > method =~ in untitled document at line 7 > > at top level in untitled document at line 7 > > method each in untitled document at line 5 > > at top level in untitled document at line 5 > > method each in untitled document at line 4 > > at top level in untitled document at line 4 > > Program exited. > > > > I know my issue is with this particular line: if(add =~ > > Regexp.escape(comp)) > > But I am not sure where to find out or how to resolve it > > > > Any help again is appreciated. > > > > Code: > > > > addresses = ["f... / bar1.com", "f... / bar2.com", "f... / bar3.com"] > > competitors = ["bar.com", "bar1.com", "bar4.com"] > > > > addresses.each do |add| > > competitors.each do |comp| > > puts "Checking Competitor: #{comp}" > > if(add =~ Regexp.escape(comp)) > > puts "#{check} matched" > > else > > puts "No Match" > > end > > end > > end > > Sorry guys, Messed up on initial insert of the code. Here is the code > as follows: > > Code: > addresses = ["f... / bar1.com", "f... / bar2.com", "f... / bar3.com"] > competitors = ["bar.com", "bar1.com", "bar4.com"] > addresses.each do |add| > competitors.each do |comp| > puts "Checking Competitor: #{comp}" > if(add =~ Regexp.escape(comp)) > puts "matched" > else > puts "No Match" > end > end > end There are a few things to say about this approach. First, it seems no regular expression is needed here - at least not for matching. Second, using Set is significantly more efficient. Here's one way to do it: competitors = ["bar.com", "bar1.com", "bar4.com"].to_set addresses = ["f... / bar1.com", "f... / bar2.com", "f... / bar3.com"] dirty, clean = addresses.partition {|adr| competitors.include? adr[/@(\S+)/, 1].downcase} Now, if you are reading a large number of addresses from a file, you could do competitors = ["bar.com", "bar1.com", "bar4.com"].to_set dirty = [] clean = [] File.foreach "adresses.txt" do |line| adr = line[/\S+@\S+/] # this should be improved (competitors.include? adr[/@(\S+)/, 1].downcase ? dirty : clean) << adr end Kind regards robert -- use.inject do |as, often| as.you_can - without end