I need the following code to look in a directory for all order files that begin with "ord.". Then, look at the order dates in each of these files, and if the ALL the dates are Mondays, move the file to the order_bad directory. As soon as I hit a non-Monday date, move the file to the order_good directory. Sounds rather simple, but my code is not moving the files that are all Mondays. I appologize in advance for the way this posting looks. This is my first time posting here and I can't seem to get it quite right.
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

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.