> -----Original Message-----
> From: John W. Krahn [mailto:[EMAIL PROTECTED]
> Sent: Monday, August 21, 2006 5:49 PM
> To: Perl Beginners
> Subject: Re: grab first item in every file
> 
> Brian Volk wrote:
> > Hi All~
> 
> Hello,
> 
> > How can I grab the first item in every file and include in the first
> > print statement below.  The first item will always start w/ a "$" and
> > will not match a key in %DIR_LIST. The other items in the file (.pdf's)
> > may or may not match a key in %DIR_LIST
> 
> It looks like you need something like this:
> 
> #!/usr/bin/perl
> use strict;
> use warnings;
> 
> # open the directory that contains all the MSDS in .pdf format
> my $pdf_dir = '/var/www/html/msds';
> opendir DIR, $pdf_dir or die "Can't open the $pdf_dir: $!\n";
> 
> # read file names in that directory into @pdfs
> my @pdfs = grep /\.pdf\z/i, readdir DIR
>     or die "Unable to read current dir:$!\n";
> my %DIR_LIST = map { $_ => 1 } @pdfs;
> closedir DIR;
> 
> # open all the .TXT file from the 400
> my $orders_dir = '/home/bvolk/msds_in';
> opendir ORDERS, $orders_dir or die "Can't open $orders_dir: $!";
> 
> # read all the item numbers in all the .txt files w/ map and
> # load @ARGV for <> operator
> @ARGV = map "$orders_dir/$_", grep !/^\./, readdir ORDERS;
> 
> my ( $job, $truck );
> while ( <> ) {
>     ( $job ) = $ARGV =~ /(\d+)/ if $. == 1;
>     $truck = $1 if /\A\$(\d+)/;
>     next unless /\A((.+)\.pdf)\z/;
>     my ( $key, $msds ) = ( $1, $2 );
> 
>     if ( exists $DIR_LIST{ $key } ) {
>         my $indy = 10;
>         print "Job $job printing msds $msds to $indy on truck #$truck\n";
>         }
>     else {
>         print "Job $job missing msds $msds\n";
>         }
>     }
> 
> __END__
> 
> 
> 
> John
> --
> use Perl;
> program
> fulfillment
> 
> --


John, 

Thank you for the reply, I understand most of it: :-)  I'm now having a
problem getting the $msds to print. Below is a sample of a text file and the
program w/ your changes.  

$job and $truck print but $msds won't print in either case.

Filename1: O20270.TXT
$432
12345.pdf
12121.pdf
13131.pdf
44444.pdf

 
Filename2: O20271.TXT
$433
12345.pdf
12000.pdf

#!/usr/bin/perl
use strict;
use warnings;

# open the directory that contains all the MSDS in .pdf format
my $pdf_dir = '/var/www/html/msds'; 
opendir DIR, $pdf_dir or die "Can't open the $pdf_dir: $!\n";

# read file names in that directory into @pdfs
my @pdfs = grep /\.pdf\z/i, readdir DIR or die "Unable to read current
dir:$!\n"; 

my %DIR_LIST = map { $_ => 1 } @pdfs; 

closedir DIR;

# open all the .TXT file from the 400
my $orders_dir = '/home/bvolk/test';
 opendir ORDERS, $orders_dir or die "Can't open $orders_dir: $!";

# read all the item numbers in all the .txt files w/ map and 
# load @ARGV for <> operator 

@ARGV = map "$orders_dir/$_", grep !/^\./, readdir ORDERS;

my ( $job, $truck );
while ( <> ) {
    ( $job ) = $ARGV =~ /(\d+)/ if $. == 1;
      $truck = $1 if /\A\$(\d+)/;

# $job and $truck are working great!! 

# next unless the next line ends w/ .pdf  Correct?       
    next unless /\A((.+)\.pdf)\z/;  
    my ( $key, $msds ) = ( $1, $2 );    

# nothing below here is working. Should at least print the else statement
Right? 
        
    if ( exists $DIR_LIST{ $key } ) {
        my $indy = 10;
        print "Job $job printing msds $msds to $indy on truck # $truck\n";
        }
    else {
        print "Job $job missing msds $msds\n";
        }
    }


Thank you again for your help!

Brian 


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to