Cathy wrote:

my $lines = 0;
my $current_line = 0;
my $percentage;
my $percentage_new;

open(my $FILE,  "<",  @ARGV[0])  or die "Can't open log file: $!";

while (sysread $FILE, $buffer, 4096) {
        $lines += ($buffer =~ tr/\n//);
}

print "$lines lines\n";
close $FILE or die "$in: $!";

open(my $FILE,  "<",  @ARGV[0])  or die "Can't open log file: $!";

while(<$FILE>) {
        $current_line += 1;
        $percentage_new = sprintf("%d",$current_line / $lines * 100);

        #$delta = $percentage_new - $percentage;
        #print "$delta\n";
        if($percentage_new - $percentage > 0) {
                print "$current_line\n";
                $percentage = $percentage_new;
        }
}

Hi all,
This is my first post and this could be easy question.

In a source code above, it prints out total line number first, and in
a loop ,
it prints out the line number whenever the percentage increases.
The problem is, when I put \r instead of \n, nothing is printed.
But if I remove 'if' statement, it prints out normally with \r.
Does anyone know what is wrong?

Try it like this instead:

#!/usr/bin/perl
use warnings;
use strict;
use Fcntl ':seek';

$|++; # autoflush ON

open my $FILE, '<', $ARGV[ 0 ] or die "Can't open $ARGV[0]: $!";

my $lines = 0;
while ( read $FILE, my $buffer, 4096 ) {
    $lines += $buffer =~ tr/\n//;
    }

print "$lines lines\n";

seek $FILE, 0, SEEK_SET;

my $percentage = 0;
while ( <$FILE> ) {
    my $percentage_new = int( $. / $lines * 100 );

    #my $delta = $percentage_new - $percentage;
    #print "$delta\n";
    if ( $percentage_new - $percentage > 0 ) {
        print "$percentage_new\r";
        $percentage = $percentage_new;
        }
    }
print "\n";

__END__



John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order.                            -- Larry Wall

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to