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