Hello Dear Monks

I have made a script that works but I would like to generalise it. Could you give me some advice ? Thanks. The aim of the code is to equally redistribute the times of aircraft departures.

here is the input file

11:10 A1 11:30 E4 11:30 Z4 11:50 H5 12:02 H6 12:25 B2 12:25 A8 12:30 F3 12:30 E7 12:50 E15 12:55 E16

Here is the output

11:00 A1 11:20 E4 11:40 Z4 11:59 H5 12:00 H6 12:10 B2 12:20 A8 12:30 F3 12:40 E7 12:50 E15 12:59 E16

here is my code

use strict; use diagnostics; my $infile = $ARGV[0]; open my $INFILE, q{<}, $infile or die; my $outfile = "sliced_"."$infile"; open my $OUTFILE, q{>}, $outfile or die; sub convert_time_in_mn { my ($ref_time)=@_; my @tab = split(":",$ref_time); #$value=$tab[0].$tab[1]; my $value=($tab[0]*60)+$tab[1]; return $value; } my @slice_11_12_flights; my @slice_12_13_flights; while(my $line = <$INFILE>){ $line =~ s/\s+$//; my $time = substr($line , 0, 5); my $time_mn = convert_time_in_mn($time); print STDOUT "time_mn is ${time_mn}\n"; $line = "$line\n"; if (${time_mn} <= 719){ push @slice_11_12_flights, $line; } else{ push @slice_12_13_flights, $line; } } my $nb_11_12 = @slice_11_12_flights; my $nb_12_13 = @slice_12_13_flights; # the interval number should be equal to the number of elements minus +one my $NB_11_12 = $nb_11_12 -1; my $NB_12_13 = $nb_12_13 -1; # mean nb of seconds between two planes in the same slice my $inter_sec_11_12 = 3600/$NB_11_12; my $inter_sec_12_13 = 3600/$NB_12_13; my $time_11_12 = 0; my $time_12_13 = 0; my @minutes; foreach my $i(0..$NB_11_12){ my $sec = $i * $inter_sec_11_12; print STDOUT "sec is $sec\n"; my $min = int($sec/60); # in order to avoid confusion if ($min == 60){ $min = 59; } if ($min =~ /^(\d)$/){ $min = "0"."$1"; } my $time = join ":", "11", "$min"; print STDOUT "time is $time\n"; my $slice = $slice_11_12_flights[$i]; print STDOUT "slice is $slice\n"; my $former_time = substr($slice , 0, 5); $slice =~ s/$former_time/$time/; print $OUTFILE "$slice"; } foreach my $i(0..$NB_12_13){ my $sec = $i * $inter_sec_12_13; print STDOUT "sec is $sec\n"; my $min = int($sec/60); # in order to avoid confusion if ($min == 60){ $min = 59; } if ($min =~ /^(\d)$/){ $min = "0"."$1"; } my $time = join ":", "12", "$min"; print STDOUT "time is $time\n"; my $slice = $slice_12_13_flights[$i]; print STDOUT "slice is $slice\n"; my $former_time = substr($slice , 0, 5); $slice =~ s/$former_time/$time/; print $OUTFILE "$slice"; }

In reply to generalisation of a script by steph_bow

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.