Alan writes..

>"Kenneth Jideofor [ MTN - Ikoyi ]" wrote:
>> 
>> Hi folks,
>> 
>> I have two files, FILE1 and FILE2. Each of the two files is an array
>> of numbers. I want to check for the occurrence of each element of
>> FILE1 in FILE2. In other words, FILE2 is checked for the occurrence
>> of each of the elements in of FILE1. For any element of FILE1 that
>> occurs in FILE2, this element is saved in a file, FILE3.txt.
>>
>> I tried the attached Perl script to perform this exercise but the
>> script failed with the following error message:
>> 
>> "main:database" used only once: possible typo at ./GREP1.pl line 8"
>> 
>> Kindly assist me with a solution to actualising this task.
>
>try this:
>
>#!/usr/bin/perl -w
>
>open FILE1, "</tmp/AAA.txt" or die "Can,t open AAA.txt: $!";
>open FILE2, "</tmp/DATA.dat" or die "Can't open DATA.dat: $!";
>open OUT, ">>/tmp/FILE3.txt" or die "Can't open BBB.txt: $!";
>
>my @numbers = <FILE1>;
>my @database = <FILE2>;
>close(FILE1);
>close(FILE2);
>
>foreach $number (@numbers) {
>                chomp($number);
>                print OUT grep {/$number/} @database;
>}
>close(OUT);

What if FILE1 contains the number 1 and FILE2 does not contain 1 but
contains 11 then the regex will match against 11 and print '1' out into
FILE3 but the number 1 was not in FILE2 at all.

Additionally your syntax:

  print OUT grep {/$number/} @database;

Will mean that your output will print out multiple entries into FILE3
for each iteration, eg if FILE1 contained:

  1
  2
  3

And FILE2 contained:

  11
  12
  13
  14
  21
  44
  22

Then your output would be as follows (I've added the spaces in for
readability - in fact there would be no spaces or newlines in your
output):

  11 12 13 14 21 12 21 22 13
  ^^^^^^^^^^^
  First pass
              ^^^^^^^^^^^
              Second pass
                          ^^
                          Third pass

At the very least you'd have to do {/^$number$/} but that's MUCH less
efficient than doing { $_ == $number } - perl strips off the \n itself
when converting $_ to a number. But my preference is to use the hash
lookup detailed in my other post.

-- 
  Jason King
_______________________________________________
ActivePerl mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to