use strict; use File::Copy; use Time::Local; use lib "/opt/perl/lib/site_perl/5.6.1/Mail"; use Mail::Sender; my $instance = "natt1"; my $instance_root = "/opt/manu/manu71/transport/$instance"; my $goodordpath = "$instance_root/order_good"; my $badordpath = "$instance_root/order_bad"; my $allmondayflag = 0; my $starttime = localtime; print "\n\n*** Starttime = $starttime ***\n\n"; if (-d "$instance_root/order_temp") { my $where = "$instance_root/order_temp"; print "Directory $where exists. Directory check was successful.\n\ +n"; # find the number of files we are to process my @count = (<$instance_root/order_temp/ord.*>); my $plural = (scalar(@count = (<$instance_root/order_temp/ord.*>) +) == 1) ? "" : "s"; print "Processing ", scalar @count, " order file$plural.\n"; # if there are no files to process, bail print "\nThere are no files to process. Now exiting.\n" if (@count + == 0); foreach my $orderfile (<$instance_root/order_temp/ord.*>) { print "\nProcessing Order File: $orderfile\n"; open (FILEH, $orderfile) or die "Could not open order file: $o +rderfile : $!"; $allmondayflag = 0; while (my $line = <FILEH>) # loop as long as there are +records in the file { my $ordertype = substr($line, 0, 2); # used to fin +d the order header if ($ordertype eq "HM") # only look at the dates o +n the header records { my $ordernum = substr($line, 2, 7); my $date_str = substr($line, 64, 8); my ($year, $month, $day) = $date_str =~ m/ +(\d{4})(\d{2})(\d{2})/; my $time = timelocal("", "", "", $day, $month-1, + $year); # For $month: Jan = 0, Feb = 1, etc. if ((localtime($time))[6] == 1 ) # the order is + on a Monday { print " Order Number = $ordernum Order Date += $date_str is a Monday\n"; $allmondayflag = 1; next; # move onto the next record } else { $allmondayflag = 0; print " Order Number = $ordernum Order Date += $date_str is not a Monday. This file is OK to move and process.\n"; # We have found a date that is not a Monday. T +his file is OK. We need to move it to be processed close FILEH; move("$orderfile", $goodordpath) or die "Could n +ot move the file $orderfile. Move failed: $!"; last; # bail out of the loop if date is not M +onday and process the next order } if ($allmondayflag) { print " Order Number = $ordernum has ord +er dates that are all Mondays. This is a bad order file and is being +moved to $badordpath\n"; move("$orderfile", $badordpath) or die " +\nCould not move the file $orderfile. Move failed: $!"; #$allmondayflag = 0; } } # end of Ordertype IF } # end of while loop # close file when we run out of lines to read close FILEH; } # end of ForEach loop } else { my $where = "$instance_root/order_temp"; print "Directory $where does not exist...now exiting\n\n"; } my $endtime = localtime; print "\n*** Endtime = $endtime ***\n\n";
In reply to Seeking help with Looping problem by sasrs99
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |