The code in these examples takes advantage of the fact that hash keys are 
unique. We create a key using the tiff filename or the pdf filename, and increment the 
hash's value. If the value of the hash is 2, that means there was a pdf and a matching 
tiff. If it equals 1, then there was only one pdf or one tiff.

        You can also figure out if there is a tiff without a pdf, and don't care if 
there is a pdf without a tiff. One way to do so is: 

foreach (readdir(DIR)) {
        next unless /pdf$/ or /tiff$/ or /tif$/;
        if ($_ =~ /^(.+).tif$/i || $_ =~ /^(.+).tiff$/i) {
          ++$exists{$1};
        } elsif ($_ =~ /^(.+).pdf$/i) {
          $exists{$1} += 2;
        } else {
          die("Major malfuntion on '$_'\n");
        }
}

closedir DIR;

# Assuming each filename pair is unique:
# $exists{$_} == 1;     # One tiff
# $exists{$_} == 2;     # One pdf
# $exists{$_} == 3;     # One tiff and one pdf
print join('\n', grep { $exists{$_} == 1 } keys %exists), "\n";

__END__


=-= Robert Thompson


On Wed, Jul 10, 2002 at 11:19:04AM -0400, Chas Owens wrote:
> On Wed, 2002-07-10 at 10:17, Rupert Heesom wrote:
> > I'm working with directories in which there should be a number of graphs
> > files; one TIFF file, one PDF file.
> > 
> > I'm wanting to find which TIFF files there is no corresponding PDF file for.
> > 
> > One way to do this is to create 2 lists (arrays), one for all the TIFF files
> > in a directory, the other list for all the PDF files in the same directory.
> > Then to compare the 2 lists to find the missing PDF files.
> > 
> > However, if there is a better way to do this (I'm new to Perl), can anyone
> > let me know?
> > 
> > If there _is_ no better way, what's some good perl code for a Win32 script?
> > 
> > Regs
> > Rupert Heesom
> > Asst Distribution Engineer
> > Adventist World Radio
> 
> Hmmm... My first thought is:
> 
> 
> #!/usr/bin/perl
> 
> use strict;
> 
> my %exists;
> 
> opendir DIR, $ARGV[0] or die "Horrible death:$!";
> 
> foreach (readdir(DIR) {
>       next unless /pdf$/ or /tiff$/ or /tif$/;
>       (my $file = $_) =~ s/\.(pdf|tiff|tif)$//; #remove the extension
>       $exists{$file}++;
> }
> 
> closedir DIR;
> 
> #print every base filename that only has one occurrence in $path 
> print join('\n', grep { $exists{$_} == 1 } keys %exists), "\n";
> 
> 
> -- 
> Today is Sweetmorn the 45th day of Confusion in the YOLD 3168
> Pzat!
> 
> Missile Address: 33:48:3.521N  84:23:34.786W
> 
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to