The Java version witch include a GUI is available here
#!/usr/bin/perl
#perl2exe_include "warnings.pm"
# Author: Sébastien Roux
# Mailto: roux.sebastien@gmail.com
# License: GPLv3, see attached license
# Modules include
use Getopt::Std;
use Strict;
use DirHandle;
# Set argument parameters
getopts( "i:o:d:f:h", \%opts ) or DisplayUsage();
# Verify arguments
DisplayHelp();
TestInputDirArg();
TestDateFormatArg();
$Directory = $opts{i};
# Open specified output file
if ( $opts{o} ) {
open( OUTPUT, ">$opts{o}" )
or die print "Error: could not open '$opts{o}'\n";
}
# Loop through specified directory
# get alg and order by date descendant
my %files = get_alg_Files($Directory);
#foreach my $file ( sort { $files{$b} <=> $files{$a} } keys %files ) {
foreach my $file ( sort keys %files ) {
open( INPUT_ALG, $file )
or die print "Error: could not open $file\n";
$LCount = 1;
while () {
#First date/time row followed by "Create Spreadsheet Update Log" row
if ( ( $LCount == 1 ) && (/^\[/) ) {
chomp;
$Line = $_; # Current line
# Header filtering
unless ( $Line !~ /^.*$opts{f}.*$/ ) {
# Change date format to specified style
ChangeDateFormat();
# File output
if ( $opts{o} ) {
print OUTPUT "$Line\n";
}
# StdOut
else {
print "$Line\n";
}
}
}
# First description row: "Create Spreadsheet Update Log"
elsif ( ( $LCount == 2 ) && (/^Create/) ) {
chomp;
$Linedesc = $_;
# Header filtering
unless ( $Line !~ /^.*$opts{f}.*$/ ) {
# File output
if ( $opts{o} ) {
print OUTPUT "$Linedesc: $file\n\n";
}
# StdOut
else {
print "$Linedesc: $file\n\n";
}
}
}
else {
# Date/time row followed by "Log Updates"
if (/^\[/) {
chomp;
$Line = $_;
#$Line =~ s/[\[\]]// for 1 .. 2;
ChangeDateFormat();
}
# Description row: "Log Updates From User"
else {
$LineD = $_;
@desc = split / /, $LineD;
#ChangeMonthString();
# Date time and user
$FullHeader = "$Line - @desc[5]";
#print "$FullHeader\n";
# Header filtering
unless ( $FullHeader !~ /^.*$opts{f}.*$/ ) {
# File output
if ( $opts{o} ) {
print OUTPUT "$FullHeader\n";
}
# StdOut
else {
print "$FullHeader\n";
}
# First row of data logs (atx)
$frow = @desc[11];
# Last row of data logs (atx)
$lrow = ( @desc[11] + @desc[18] - 2 );
#print "First row: $frow, last row: $lrow\n";
# Matching rows in data logs (atx)
@data = ();
# Filename without extension
$file2 = substr( $file, 0, ( length($file) - 3 ) );
open( INPUT_ATX, $file2 . "atx" )
or die print "Error: could not open atx\n";
while () {
if ( $. >= $frow && $. <= $lrow ) {
#$_ =~ s/ /\t/g;
push( @data, $_ );
}
}
close(INPUT_ATX);
foreach (@data) {
# File output
if ( $opts{o} ) {
print OUTPUT "$_";
}
# StdOut
else {
print "$_";
}
}
# File output
if ( $opts{o} ) {
print OUTPUT "\n";
}
#StdOut output
else {
print "\n";
}
}
}
}
$LCount++;
}
close(INPUT_ALG);
}
close(OUTPUT);
exit;
#--------------------------------
sub DisplayHelp {
if ( $opts{h} || @ARGV > 0 ) {
print "DESCRIPTION :\n"
. "Merge Essbase or Analytic Services (v.5 - v.9) SSAudit files (.ATX, .ATG)\n"
. "from specified directory.\n"
. "Options available : advanced date formatting, header filtering.\n";
print "AUTHOR :\n"
. "Written by Sebastien Roux \n";
print "LICENSE :\n" . "GNU General Public License version 3 (GPLv3)\n";
print "NOTES :\n"
. "Use at your own risk !\n"
. "You will be solely responsible for any damage\n"
. "to your computer system or loss of data\n"
. "that may result from the download\n"
. "or the use of the following application/script.\n";
DisplayUsage();
}
}
#--------------------------------
sub DisplayUsage {
print "\nUSAGE: perl SSAP . pl -i <.atx & .atg directory> "
. "[-o , -d , -h]\n\n";
print "USAGE: SSAP . exe -i <.atx & .atg directory> "
. "[-o , -d , -h]\n\n";
print " -i specify SSAudit log directory, arg: \n";
print " -o specify output file, arg: \n";
print " -d specify date format, arg: \n";
print " -f specify filter on headers (case sensitive), arg: <*>\n";
print " -h display usage\n";
exit;
}
#--------------------------------
sub TestInputDirArg {
my @i = split /;/, $opts{i};
foreach $i (@i) {
if ( !-d $i ) {
print "Error: '$i' does not exists!\n";
DisplayUsage();
}
}
}
#--------------------------------
sub TestDateFormatArg {
if ( $opts{d}
&& ( uc( $opts{d} ) ne "ISO" )
&& ( uc( $opts{d} ) ne "EUR" )
&& ( uc( $opts{d} ) ne "US" ) )
{
print "Error: '$opts{d}' is not a valid argument for date format!";
DisplayUsage();
}
}
#--------------------------------
sub ChangeDateFormat {
if ( $opts{d} ) {
ChangeMonthString();
$Line =~ s/[\[\]]// for 1 .. 2;
my @g = split / /, $Line;
$lastg = scalar(@g);
# Set date format to ISO 8601 extended style (YYYY-MM-DD)
if ( uc( $opts{d} ) eq "ISO" ) {
$Line = "@g[4]/@g[1]/@g[2] @g[3]";
}
# Set date format to US style (MM/DD/YYYY)
elsif ( uc( $opts{d} ) eq "US" ) {
$Line = "@g[1]/@g[2]/@g[4] @g[3]";
}
# Set date format to European style (DD/MM/YYYY)
elsif ( uc( $opts{d} ) eq "EUR" ) {
$Line = "@g[2]/@g[1]/@g[4] @g[3]";
}
}
}
#--------------------------------
# Replace month label by month number
sub ChangeMonthString {
my $MonthIndex;
if ( $Line =~ m/(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)/ ) {
if ( lc($&) eq "jan" ) { $MonthIndex = "01"; }
elsif ( lc($&) eq "feb" ) { $MonthIndex = "02"; }
elsif ( lc($&) eq "mar" ) { $MonthIndex = "03"; }
elsif ( lc($&) eq "apr" ) { $MonthIndex = "04"; }
elsif ( lc($&) eq "may" ) { $MonthIndex = "05"; }
elsif ( lc($&) eq "jun" ) { $MonthIndex = "06"; }
elsif ( lc($&) eq "jul" ) { $MonthIndex = "07"; }
elsif ( lc($&) eq "aug" ) { $MonthIndex = "08"; }
elsif ( lc($&) eq "sep" ) { $MonthIndex = "09"; }
elsif ( lc($&) eq "oct" ) { $MonthIndex = "10"; }
elsif ( lc($&) eq "nov" ) { $MonthIndex = "11"; }
elsif ( lc($&) eq "dec" ) { $MonthIndex = "12"; }
$Line =~ s/$&/$MonthIndex/;
}
}
#--------------------------------
sub TestDateFormatArg {
if ( $opts{d}
&& ( uc( $opts{d} ) ne "ISO" )
&& ( uc( $opts{d} ) ne "EUR" )
&& ( uc( $opts{d} ) ne "US" ) )
{
print "Error: '$opts{d}' is not a valid argument for date format!";
DisplayUsage();
}
}
#--------------------------------
# List files an size for specified directory
sub get_alg_Files {
my $dir = shift;
my $dh = DirHandle->new($dir); #Cannot open directory $Directory: $!";
return map { $_ => ( stat($_) )[9] }
map { "$dir$_" }
grep { m/.alg/i } $dh->read();
}
__END__
Aucun commentaire:
Enregistrer un commentaire
your comment here please!