Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

my @shifts = qw( 5:00am 5:30am 6:00am 6:30am 7:00am 7:30am 8:00am 8:30 +am 9:00am ); print " enter time to schedul \n"; read $time; open my $fh, '+<', 'students.dat' or die "open failed: $!"; flock $fh, LOCK_EX or die "flock failed: $!"; my $found = 0; while (<$fh>) { $found = 1 if index($_, $time)== 0; } print $fh $locationNumber ,"\t" , $studentNumber ,"\t" , $time ,"\n" u +nless $found; close $fh; } students.dat ------------ name Number time Sam 04 5:00am Eddi 23 5:30am
What I am trying to do is ,if I find a person that already schedul , then I will only allow to sechdul him again an hour later, so if I have somone schedul at 5:00am , I can only schedul him at 6:00am but not 5:30am . Can anyone advice ? thanks

Replies are listed 'Best First'.
Re: updating file
by jdporter (Paladin) on Apr 08, 2004 at 16:48 UTC

    Ooh, I just love the smell of homework.

    First thing you need to do is read input lines using <>, not read. As in:

    $time = <>; chomp $time;
    You should probably do better matching of the specified $time against the values in the .dat file. E.g.
    while (<$fh>) { chomp; my( $n, $i, $t ) = split; $found = 1 if $t eq $time; }
    But where is $studentNumber coming from?

    jdporter
    The 6th Rule of Perl Club is -- There is no Rule #6.

Re: updating file
by Art_XIV (Hermit) on Apr 08, 2004 at 17:40 UTC

    Homework Hint: By the look of your array of shifts...

    my @shifts = qw( 5:00am 5:30am 6:00am 6:30am 7:00am 7:30am 8:00am 8:30am 9:00am );

    it seems quite easy to advance an hour by advancing the index of @shifts by two. Don't forget the around-the-corner logic if necessary.

    Hanlon's Razor - "Never attribute to malice that which can be adequately explained by stupidity"