Je le transforme en 3 rapports, un fichier texte, un
fichier.csv et un rapport écran imprimable. Le tout vous
permettra de gérer votre compte et d'accéder à vos opérations,
de charger le fichier (csv) dans un tableur ou une base de
données. De plus le programme vous permetra même de le
questionner sur la date, la désignation, le total en francs et/ou
uro d'une transaction choisi par vous.
Ci dessous une version en couleur réalisé avec scite (excellent
éditeur de programmes et script depuis Windows).
Trouver la derniére version de ce script ici .
Alain Adelmar aadelmar@free.fr
#!/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";
$filout = "./log_a.txt";
$filoutcsv = "log400tr.csv";
#----------- construction du hash de hash et de la liste de
liste.
$t400trs{$a} = ("$tdates{$a}", "$tdesigns{$a}",
"$tfrancs{$a}", "$teuros{$a}");
@ttr400ccp = (@tdate, @tfrancs, @teuro, @tdesign);
$t = 0; # compte
les lignes du fichier source
$a = $b = 0; #
francs ou euro (initialisation des tab & ls, nmb de tr).
open(F, "$file") or die "merde pbOpsrc $!";
@contenu = <F>;
close F or die "remerde pbfermsrc $!";
@nwcontenu = <FO>;
@tcsv = <FV>;
foreach $ligne(@contenu) {
$t++;
if ($t <= 82) {
print
"#";
}
elsif ($t <= 83)
{
$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.
$u++;
# 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.?//;
$tfrancs{$a}
= $ligne; # ajoute
un element a %tfrancs.
#*****format
$lf
= $ligne; # ligne
francs = $ligne
chomp
$lf;
#*****tabl
@tfrancs
push
@tfrancs, $ligne; # liste tfrancs
#**********
$lcsv
= $ligne;
$lcsv
=~ s/,/./;
$lcsv
= $lcsv . ",";
push
@tcsv, $lcsv;
#**********
$ligne
= $ligne . " francs";
$a++;
}
else
{
$ligne
=~ s/().{1}nbsp.?//;
$teuros{$a}
= $ligne; #ajoute
un element a %teuros.
$le
= $ligne;
chomp
$le;
write;
#************
$lcsv
= $ligne;
$lcsv
=~ s/,/./;
$lcsv
= $lcsv . "\n";
push
@tcsv, $lcsv;
#************
push
@teuro, $ligne; #
ass de la liste teuro.
$ligne
= $ligne . " euro\n";
$b++;
}
}
# reconnaitre le
champ date.
elsif ($ligne =~ m/^\d{2}\/\d{2}/)
{
$tdates{$a}
= $ligne; #ajoute
un element a %tdates.
#*******format
$ldt
= $ligne;
chomp
$ldt;
#*******tabl
@tdate
push
@tdate, $ligne; # assignation de la liste tdate
#************
$lcsv
= $ligne;
$lcsv
= $ligne . ",";
push
@tcsv, $lcsv;
#************
$ligne
= $ligne . "\t";
}
elsif ($ligne =~ m/^.*?\w.?/)
{
$tdesign{$a}
= $ligne; # ajoute
un element a %tdesigns.
#**********format
$ldg
= $ligne;
chomp
$ldg;
#**********tableau
design
push
@tdesign, $ligne;
#**********fichier
csv
$lcsv
= $ligne;
$lcsv
= $lcsv . ",";
push
@tcsv, $lcsv;
#**********************************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";
}
}
push @nwcontenu, $ligne;
}
}
sub tlib_csv {
my($ligne) = @_;
push @tcsv, $ligne;
}
print "\n$t lignes traitees pour $a operations
enregistrees.\n";
#*********************************
# confection d'un fichier db
#@ttr400ccp = (@tdate, @tfrancs, @teuro, @tdesign);
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";
$numt = <STDIN>;
chomp $numt;
$linep = $t400trs{$numt};
# $linep =
$ttr400ccp["$numt"];
print "transaction
$numt = $linep\n";
print "voulez
vous continuer ? [o-n]\n";
$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;