J'ai écrit ce programme (r400h.pl)
pour l'environnement Linux, il y a une version pour l'environement Windows
(r400W).
C'est la dernière version,
elle permet de questioner le rapport de vidéoposte (vos 400 derniéres
transactions) téléchargable depuis http://www.videoposte.com/videoposte/
Ce programme vous permettra aussi de disposer de ces transactions, en effet
il vous fera trois copies sous des formats différants.
Un fichier rapport texte au format
TXT ouvrable dans n'importe quel éditeur de texte.
Un fichier db/txt au format CSV séparé
par des virgule, une transaction par ligne, ouvrable par vos tableurs et
base de données.
Et pour finir un rapport écran
imprimable et une interaction quand à la possibilité de consulter
les transactions par leur numéro ainsi que par leurs date.
[al @al /al]$ chmod +x r400h.pl
[al @al /al]$ ./r400h
Ce script est lui aussi tré vieux et surtout le premier script que j'ai écris. Je suis convaincu qu'il peut être écrit sur 5 lignes, en plus propre. Je le laisse car il me servira surement pour faire une différentiation entre avant et apré. Alain Adelmar
#!/usr/bin/perl -w
# remd: netoyage de page (releve_ccp_plus.html)
puis en sortir 2 fichiers:
# un txt qui est un rapport des opérations
(une par ligne)
# l'autre est un .csv directement
chargable depuis excel
# puis création d'une possible
recherche de transaction par son numero
# ._ Fonctionne correctement
_.
#
# alain Adelmar aadelmar@wanadoo.fr
# commencer en 11/00 revision
07/01
format STDOUT_TOP =
Page @<<
$%
Date Transaction
francs euros
===== ==========================
======== ======
.
# initialisation des variables.
$lmonnaie = $le = $t = $a = $b =
0;
$x = "x*" x 25;
print "Entrez le nom du fichier a
traiter\n";
$file = <STDIN>;
chomp $file;
unless (-e $file) {
print "veuillez entrer un
nom de fichier valide\n";
$file = <STDIN>;
chomp $file;
}
$filout = "./dsf.txt";
$filoutcsv = "dsf.csv";
# @ttr400ccp = ([@tdate], [@tfrancs],
[@teuro], [@tdesign]);
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.
$ligne =~ s/\s{1,6}()\s{1,6}//;
# enleve les differents \t\n etc...
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
$lf = $ligne; # ligne francs
= $ligne
chomp $lf;
#*****tabl @tfrancs
push @tf, $ligne; # liste
tfrancs
#**********
&routine4csv($ligne);
#**********
$ligne = $ligne . " francs";
$a++;
}
else
{
# les euros ***************
$ligne =~ s/().{1}nbsp.?//;
$le = $ligne;
chomp $le;
write;
# pour un hashage qui garde
le principal en scalaire spitable
$tl{$b} = "$ldt" . "_" . "$ldg"
. "_" . "$lf" . "_" . "$le" . "_" . "$b";
#
*
#************************************************************
#****pour le fichier csv
$el = 1;
&routine4csv($ligne);
#************
push @te, $ligne; # ass de
la liste teuro.
$ligne = $ligne . " euro\n";
$b++;
}
}
# reconnaitre le
champ date.
elsif ($ligne
=~ m/^\d{2}\/\d{2}/) {
#*******format
$ldt
= $ligne;
chomp
$ldt;
#*******placer
dans tableau
push
@tdt, $ligne;
#******pour
csv
&routine4csv($ligne);
#***********
pour la presentation du fichier txt
$ligne
= $ligne . "\t";
}
elsif ($ligne
=~ m/^.*?\w.?/) {
#**********format
$ldg
= $ligne;
chomp
$ldg;
#**********tableau
design
push
@tdg, $ligne;
#**********fichier
csv
&routine4csv($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";
}
}
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 csv par
sub routine4csv($ligne) {
my($ligne)= @_;
$lcsv = $ligne;
if ($lmonnaie == 1) {
$lcsv =~ s/,/./;
if ($el == 1)
{
#
rajoute un saut de ligne derriere euro
$lcsv
= "$lcsv" . "\n";
$el
= 0;
$lmonnaie
= 0;
}
else {
#
si c'est des fr rajoute une virgule
$lcsv
= $ligne . ",";
}
}
else {
$lcsv = $ligne
. ",";
}
push @tcsv, $lcsv;
}
#@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 "$x\n";
print "indiquer le numéro
de la transaction: ";
$rq = <STDIN>;
chomp $rq;
$rl = $tl{$rq};
($dt, $dg, $frs, $eur, $nt)=split(/_/,
$rl);
print "\ndate:\t$dt\n";
print "designation:\t$dg\n";
print "somme en fr:\t" . "$frs"
. "\nfont en euro:\t$eur\n";
print "ceci était la
transaction n° $nt\n";
#=========par les differentes
listes et index
print "$x\n";
print "mais aussi par les
listes\n";
$date = $tdt[$rq-1];
$lbl = $tdg[$rq-1];
$f = $tf[$rq-1];
$e = $te[$rq-1];
print "transaction $rq:\n$date\n$lbl\n$f\n$e\n";
#===================================
print "voulez vous continuer
? [o-n]\n";
$resp = <STDIN>;
}
print "$x\n";
print "tchao !!\n";
print "$x\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;