## print all unrecognized lines in an EverQuest log file
use strict;
use warnings;
use Getopt::Std;
our ($opt_s);
getopts('s');
my ($rec_count, $total_count) = (0,0);
use Games::EverQuest::LogLineParser;
die "USAGE: perl eqlog_unrecognized_lines.pl <eqlog_file> [output_file]\n" unless @ARGV > 0;
my ($eqlog_file, $output_file) = @ARGV;
$output_file = defined $output_file ? $output_file : '-';
open (my $eqlog_fh, $eqlog_file) || die "$eqlog_file: $!";
open (my $output_fh, ">$output_file") || die "$output_file: $!";
my $start = time();
while (<$eqlog_fh>)
{
$total_count++;
if (parse_eq_line($_))
{
$rec_count++;
}
else
{
print $output_fh $_;
}
}
my $total_secs = time() - $start;;
if ($opt_s)
{
my $rec_percent = 100 * $rec_count / $total_count;
printf STDERR " %% recognized: %.01f ($rec_count/$total_count)\n", $rec_percent;
printf STDERR "lines per second: %d ($total_count/$total_secs)\n", $total_count / $total_secs;
}
close $eqlog_fh;
close $output_fh;
__END__
=head1 NAME
eqlog_unrecognized_lines.pl - Perl script that prints lines from an EverQuest
log file, which are unparsable by L<Games::EverQuest::LogLineParser>.
=head1 SYNOPSIS
## output to STDOUT
eqlog_unrecognized_lines.pl c:\everquest\eqlog_Soandso_server.txt
## output to file
eqlog_unrecognized_lines.pl c:\everquest\eqlog_Soandso_server.txt eqlog.csv
## output statistics
eqlog_unrecognized_lines.pl -s c:\everquest\eqlog_Soandso_server.txt eqlog.csv
=head1 DESCRIPTION
C<eqlog_eqlog_unrecognized_lines.pl> prints lines from an EverQuest log file,
which are unparsable by L<Games::EverQuest::LogLineParser>.
This is useful if in finding new line types which should be added to the
module.
=head1 OPTIONS
=over 4
=item C<-s> show stats on STDERR
example:
% recognized: 79.5 (686623/863465)
lines per second: 7380 (863465/117)
=back
=head1 AUTHOR
Daniel B. Boorstein, E<lt>danboo@cpan.orgE<gt>
=head1 TO DO
=over 4
=item - show progress
=back
=head1 SEE ALSO
L<Games::EverQuest::LogLineParser>
=cut