#!/usr/bin/perl -w
# remd: netoyage de page shtml de (400 dernieres operations ccp)
# pour en sortir un fichier texte list par operation et une table de hash
# pour rechercher une operation par la date ou le montant ou le label,
# alain adelmar nov 2000
# *******************************************ce prog tourne a merveille
format STDOUT_TOP =
Page @<<
$%
Date Transaction francs euros
===== ========================== ======== ======
.
print "Entrez le nom du fichier a traiter\n";
$file = <STDIN>;
chomp $file;
print "je traite le fichier $file\n";
$z = 0;
$filout = "./log_a.txt";
$filoutcsv = "log400tr.csv";
#----------- construction du hash et de la liste de liste.
# non deux hash: un sur la date,valeur de la ligne
# l'autre sur la désignation valeur de la ligne.
$t = 0; # compte les lignes (en dur) du fichier source.
$a = $b = 0; # francs ou euro (initialisation des tab & ls, nmb de tr).
@nwcontenu = <FO>; # assigne la variable liste au handle FO.
@tcsv = <FV>; # idem pour @tcsv à FV.
open(F, "$file") or die "merde pbOpsrc $!";
@contenu = <F>;
close F or die "remerde pbfermsrc $!";
foreach $ligne(@contenu) {
$t++; # compte lignes et dégage la merde.
if ($t <= 82) {
print "#";
}
elsif ($t <= 83) { # entete
$ligne = "date,designation,francs,euros" . "\n";
tlib_csv($ligne);
print "\ntraitement maintenant\n";
}
else {
$ligne =~ s/^(<.*?>)?//;
$ligne =~ s/^(<.*?>)?//;
$ligne =~ s/()(<.*?>)+//;
$ligne =~ s/()(<.*?>)+//;
$ligne =~ s/\n//; # ote les sauts de lignes.
next if ($ligne eq ""); # et degage les ligne vides.
# reconnaitre le champ francs et le champ euro. (1/2)
if ($ligne =~ m/^\d{0,1}.*?\d{1,3}.?\d{2} /) {
if ($a == $b) {
$ligne =~ s/().{1}nbsp.?//;
#*****format
chomp $ligne; # ligne francs = $ligne
$lf = $ligne;
#**********
$ligne =~ s/,/./;
$ligne = $lcsv . ",";
tlib_csv($ligne);
#**********
$ligne = $ligne . " francs";
$a++;
}
else {
$ligne =~ s/().{1}nbsp.?//;
chomp $ligne;
$le = $ligne;
write;
#========table de hash par la date
$line = "$ldt" . "\t$ldg\t$lf\t$le\n";
%date = ("$ldt" => "$line");
#======
# assignation d'une ligne de transaction
@ltr = qw($ld $lf $le $ldg);
$lstr[$a] = (@ltr);
#************
$ligne =~ s/,/./;
$ligne = $ligne . "\n";
tlib_csv($ligne);
$b++;
}
}
# reconnaitre le champ date.
elsif ($ligne =~ m/^\d{2}\/\d{2}/) {
chomp $ligne;
$ldt = $ligne;
tlib_csv($ligne);
$ligne = $ligne . "\t";
}
elsif ($ligne =~ m/^.*?\w.?/) {
chomp $ligne;
$ldg = $ligne;
tlib_csv($ligne);
#**********************************alignement sans format***
if (length $ligne <= 16) {
$ligne = $ligne . "\t\t\t\t";
}
elsif (length $ligne <= 24) {
$ligne = $ligne . "\t\t\t";
}
elsif (length $ligne <= 32) {
$ligne = $ligne . "\t\t";
}
else {
$ligne = $ligne . "\t";
}
}
# dépose chaque element avec "\n" aprés euro.
push @nwcontenu, $ligne;
}
}
sub tlib_csv {
my($ligne) = @_;
$lcsv = $ligne;
$lcsv = $lcsv . ",";
push @tcsv, $lcsv;
}
print "\n$t lignes traitees pour $a operations enregistrees.\n";
#*********************************
# confection d'un fichier db
open (FO, ">$filout") or die "merde pbOpcible $!";
print FO @nwcontenu;
close FO or die "rem pbfermcible $!";
open (FV, ">$filoutcsv") or die "mutain de poine ca couille pbOpfls $!";
print FV @tcsv;
close FV or die "flute that's os pbShutfls $!";
print "Voilà, les deux fichier sont créés:\nlog_a.txt => pour un listing texte\nlog400tr.csv => pour une db (séparé par des virgule).\n";
print " Voulez vous jeté une oeil ? [o/n]\n";
$resp = <STDIN>;
#-------- appel a oui_non dans boucle while, fort isn't it ?
while (! oui_non($resp)) {
print "indiquer le numéro de la transaction:\n";
chomp($numt = <STDIN>);
@lined = $date{$numt};
foreach ($meme_jour(@lined)) {
print "transaction\t $meme_jour\n";
print "voulez vous continuer ? [o-n]\n";
chomp($resp = <STDIN>);
}
print "tchao !!\n";
#-------------- oui-non -----faire une routine qui renvoie 1 si oui
sub oui_non {
my($rep) = @_;
$rep =~ s/\W.*//;
$resp =~ tr/A-Z/a-z/;
if ($rep =~ /^o|y/) {
return 0; # faux pour while(! oui_non($resp))
}
else {
return 1; # vrai pour sortir
}
}
format STDOUT =
@<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<< @<<<<<<<
$ldt, $ldg, $lf, $le
.
END;