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
Here is a section of the script
use strict;
use warnings;
#use diagnostics;
use Getopt::Long;
use constant DEFAULT_REPORTDIR => ".\\compare_report";
my $master_list = "";
my @compare_lists = "";
my $help = "";
Getopt::Long::Configure ("ignorecase");
GetOptions(
"master=s" => \$master_list,
"compare:s" => [EMAIL PROTECTED],
"help|?!" => \$help,
);
usage() if $help;
@compare_lists = split(' ',join(' ',@compare_lists));
foreach (@compare_lists){
die "File $_ does not exist or it's empty. Please check the file try
again.\n" unless -s $_;
}
################################
#foreach (@compare_lists){print "$_\n";} # This prints the CLI arguments
correctly.
#################################
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`
>>>
>>>
>>>
>>
>>
>