On Fri, 2008-05-30 at 13:04 +0100, Mimi Cafe wrote:
> Still cannot see why Perl complains that  Could not open file for reading.
> File or directory does exist.
> I have modified my script and now using Getopt::Long module instead of the
> @ARGV variable. Can someone take a look?
> 
> The script is now run with command line options like this:
> myscript --master --compare file_name --compare another_file

Are you missing a "file_name" in that command template?

Does this work when you hard code the filenames?  When you use full
pathnames or fully qualified relative paths?  Does this work with only a
single compare option?


> ################################
> #foreach (@compare_lists){print "$_\n";} # This prints the CLI arguments
> correctly.
> #################################

You may want to use a more visible delimiter to ensure that there's no
whitespace issues.  


> 
> my $outputdir = DEFAULT_REPORTDIR;
> unless (-d $outputdir){
>  mkdir ($outputdir) or die "could not create dir for $outputdir: $!\n";
> }
> 
> # Read the master list and populate our array.
> open (MASTERFILE, "<", $master_list) or die "Could not open $master_list for
> reading: $!\n";
> my @master_clients = <MASTERFILE>;
> close MASTERFILE;
> ##############################
> #print "master list starts below:\n";
> #foreach (@master_clients){print "$_\n";}exit;
> ######################################
> my (%inputclient,$list);
> 
> # Read the other files and compare the content to the master client list.
> foreach $list (@compare_lists){
>  # Output file name set of element curerently processed.
>  # Open file to read from.
>  open(INPUTFH, "<", $list) or die "Could not open $list for reading:
> $!\n"; # Could
> not open file for reading. File or directory does exist.
>  while (<INPUTFH>){
>    chomp;
>    $inputclient{"s_"} = $_;
>  }
>  close INPUTFH;
> 
>  #$outputfile = "NOT_IN" . "$outputfile";
>  my $outputfile = $list;
>  my (@missing_clients, %outputclient);
> 
>  open (OUTPUTFILE, ">", $outputfile) || die "Could not open $outputfile:
> $!\n";
>  foreach my $aditem (@master_clients){
>   push (@missing_clients, $aditem) unless exists $inputclient{"$aditem"};
>  }
> 
> 
> 
>  On 29/05/2008, Mimi Cafe <[EMAIL PROTECTED]> wrote:
> >
> >
> >  I am on Windows so it should not be case-sensitive. The script and all
> >> required files in one folder. I pass 3 arguments to the script (script.pl
> >> file1 file2 file3)and I can open the first file stored in $ARGV[0] as seen
> >> below:
> >>
> >> my $ad_clients = shift @ARGV;
> >>
> >> open (ADFILE, "<", $ad_clients) or die "Could not open $ad_clients for
> >> reading: $! \n"; # This works fine!
> >> my @ad_clients = <ADFILE>;
> >> close ADFILE;
> >>
> >> my %inputclient;
> >>
> >> foreach my $supplied (@ARGV){
> >> open (INPUTFILE, "<", $supplied) or die "Could not open $supplied for
> >> reading: $!\n # This does not works! Error: No such file or directory
> >>
> > Mimi
> >
> >>
> >>
> >>
> >>
> >> On 29/05/2008, Ken Foskey <[EMAIL PROTECTED]> wrote:
> >>>
> >>>  On Thu, 2008-05-29 at 11:45 +0100, Mimi Cafe wrote:
> >>>
> >>> my script is in the same directory as my files, but it cannot find the 
> >>> file
> >>> ABC.txt in open() below.
> >>>
> >>> foreach my $supplied (@ARGV){
> >>>  # Output file name set of element currently processed.
> >>>
> >>>  # Open file to read from.
> >>>  open (INPUTFILE, "<", "$supplied") or die "Could not open $supplied: 
> >>> $!\n";
> >>> # Error: No such file or directory.
> >>> }
> >>>
> >>> Any help
> >>>
> >>> Mimi
> >>>
> >>>
> >>>
> >>> for starters you might want to look at the <> operator:
> >>>
> >>> while( <> ) {
> >>> }
> >>>
> >>> Will read each file on the command line in sequence, saves you thinking
> >>> about it.
> >>>
> >>> If it is Unix it is case sensitive,  is this your problem?
> >>>
> >>> Are you actually in the directory?   `bin/myscript.pl bin/ABC.txt`
> >>>
> >>>
> >>>
> >>
> >>
> >


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


Reply via email to