Currently, i am trying to count the unqiue shop count in all the specific files. I am getting output on specified dates rather all the dates.
Code
sub check_day1 {
my ($base, $closed, $source) = @_;
my (%day, %delivered, %extras, %shop_list);
for my $file (<$base.*casa*>) {
my @elem = split /\./, basename($file);
my $extn = pop @elem;
my $ext = $elem[5];
if ( $extn eq 'sales' && $ext eq 'casa' ) {
my $date = $elem[4];
next unless $date =~ m/^\d{8}$/;
open IN, $file or die "Unable to open $file: $!";
while (<IN>) {
chomp;
my @elem = split /\t/;
my (undef, $shop, undef, undef, undef, undef) = @elem;
if ( ! defined $shop_list{$shop} ) {
$day{$date}++;
$shop_list{$shop} = 1;
}
}
close IN or die "Unable to close $file: $!";
} else {
$extras{$extn}++;
}
}
my $num_day = 0;
print "Sales dates from split sales: \n";
for my $day ( sort keys %day ) {
my $closed_day = 0 ;
if ( defined $$closed{$day} ) {
$closed_day = 1;
delete $$closed{$day};
}
my $file;
if ( $source eq 'R' ) {
$file = $day{$day} == 1 ? "shop" : "shop";
} else {
$file = $day{$day} == 1 ? "file" : "files";
}
if ( $closed_day ) {
$delivered{$day} = " $day: $day{$day} $file (Note - shop marked as closed for this day)\n";
push @messages, " $day: $day{$day} $file (Note - shop marked as closed for this day)";
} else {
$delivered{$day} = " $day: $day{$day} $file\n";
push @messages, " $day: $day{$day} $file";
}
$num_day++;
}
for my $day ( sort keys %$closed ) {
$delivered{$day} = " $day: $$closed{$day}\n";
$num_day++;
}
for my $day ( sort keys %delivered ) {
print $delivered{$day};
}
if ( %extras ) {
print "\nNon-sales files:\n";
for my $extn ( sort keys %extras ) {
my $file = $extras{$extn} == 1 ? "file" : "files";
printf " %-8s: %s $file\n", $extn, $extras{$extn};
}
} else {
print "\nNo non-sales files found\n";
}
return $num_day;
}
Input:
file.uk.2300.ttt.20240111.casa.sales
file.uk.2300.ttt.20240112.casa.sales
Current Output:
20240111 : 185 shop
Expected output
20240111: 185 shop
20240112: 185 shop