Forging/Forging Perl Script

The official GemStone IV encyclopedia.
< Forging
Revision as of 00:16, 3 July 2015 by XYGON (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Used with scriptname.pl <CharacterName>

use strict;
use warnings;
use DBI;

my(%previous_inventory);
my(%current_inventory);

parse_logs();

sub get_sorted_files {
   my $path = shift;
   opendir my($dir), $path or die "can't opendir $path: $!";
   my %hash = map {$_ => (stat($_))[9] || undef} # avoid empty list
           map  { "$path$_" }
           readdir $dir;
   closedir $dir;
   return %hash;
}

sub parse_logs {
  my($charname) = $ARGV[0];

  print "Parsing logs\n";
  my @arRank;
  my $curRank = 1;
  
  my %files = get_sorted_files("./");
  STDOUT->autoflush( 1 );
  foreach my $filename (sort{$files{$a} <=> $files{$b}} keys %files) {

    # Only 2nd argument's logs
    next if ($filename !~ /$charname*/);

    open my $logfile, '<', $filename or die "Could not open '$filename' $!\n";

    while (my $line = <$logfile>) {
      chomp $line;

      if ($line =~ /180 sec/) { 
        # Log an attempt
        $arRank[$curRank] += 1;

      } elsif ($line =~ /Aha, you learned something that time./) {
        # Next rank
        $curRank += 1;
      }
    }
  }

  # Print all results
  for (my $i=1; $i <= $curRank; $i++) {
    print $i, " - ", $arRank[$i], "\n";

  }
}