----- Original Message -----
From: Brian Volk <[EMAIL PROTECTED]>
Date: Thursday, April 28, 2005 12:45 pm
Subject: RE: if else question

> 
> > > Hi All,
> > Hello,
> > 
> > > 
> > > The first time I wrote this if else statement I wrote it 
> > > correctly...  now
> > > I've confused myself... :~)  
> > That will happen often !
> > > 
> > > If the "if" statement returns false the program writes that 
> line 
> > > in the file
> > > to $error_log for every $file in the directory....  I just 
> what 
> > > the line in
> > > the file to be written one time... not one time for every 
> > file in the
> > > directory...  Perl is doing exactly what I have written...  
> It's 
> > > just not
> > > what I want..  :~)
> > > 
> > > foreach line in the txtfile, match a file in the 
> > > directory....print file.
> > > ...else print the line item in txtfile to the error_log.... 
> > > 
> > > How do I write the code so the line item only prints to the 
> > > error_log one
> > > time?
> > > 
> > > 
> > > my $file_dir = "F:";
> > > opendir(DIR, $file_dir) or die "Can't open the $file_dir: $!\n";
> > > 
> > > my @files = readdir(DIR) or die "Unable to read current dir:$!\n";
> > > closedir(DIR);
> > > 
> > > my $orders_dir = "c:/orders";
> > > opendir (ORDERS, $orders_dir) or die "Can't open $orders_dir: $!";
> > > 
> > > @ARGV = map { "$orders_dir/$_" } grep { !/^\./ } readdir ORDERS;
> > > 
> > > while (<>) {
> > >     chomp;
> > > 
> > > foreach my $file (@files) {
> > >     my $error_log = "c:/brian/test/no_file.txt";
> > >  open (NOFILE, ">> $error_log") or die "can't open 
> $error_log:$!\n";> > 
> > > if ($_ eq $file) {
> > > print $file;
> > > 
> > > 
> > > ####  This is printing $_ to the error_log one time for every 
> file 
> > > in the
> > > directory
> > > #### I just want it to print to the error_log one time if 
> there is 
> > > not a
> > > match in the directory. 
> > I am not exactly sure what you want, but it sounds like you 
> > want exact oposite of what you already have ?? in which case, 
> > the following should do:
> > 
> >  if ($_ ne $file) { print $file;}
> > 
> > HTH,
> > Mark G.
> 
> Mark, thank you for you help but actually the statement below is 
> the one I'm
> having trouble getting correct.   If the line item in the file 
> does not
> match a filename in the directoy, print the line item to the 
> error_log one
> time... right now it's printing the line item to the error_log, 
> "NOFILE" one
> time for every file in the directory... So if I have a file w/ two 
> lineitems (file names) that don't match a any of the files in the 
> directoy, the
> error_log will have 50 entries for line item one and 50 entries 
> for line
> item two.. 
OK I get it now. I have made a few changes to your original, particular because 
I don't liek to use @ARGV with in a script. I also changes the way you store 
file, moving it into a hash structure so comparisons are much faster. Feel free 
to modifie as is.

HTH,
Mark G.

#!PERL

use warnings;
use strict;

open RD,"te.txt" or die "ERROR: $!\n";
opendir RD_DIR, "." or die "ERROR: $!\n";;

my @TMP = readdir RD_DIR or die "ERROR: $!\n";
my %DIR_LIST;

$DIR_LIST{$_}=1 for @TMP;


foreach my $file ( <RD> ){
chomp $file;

unless( $DIR_LIST{$file} ){print STDERR "$file: NOFILE\n";next;}

# do stuff here if matched



}


> 
> > 
> > > 
> > > } else {
> > >        print NOFILE "\n";   
> > >       } 
> > > }
> > > 
> > > closedir (ORDERS);
> > > 
> > > 
> 
> Thanks again!
> 
> Brian 
> 
> > 
> > 
> > 
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
> 
> 
> 


-- 
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