précédant
| suivant
| sommaire
400der
Deux mots pour dire que ce script est
complètement obsolète, mal écrit et ne sers plus
à rien vue que la présentation à la poste n'est
plus la même. C'était mon premier script en Perl et
maintenant je pourrai l'écrire en 5-6 lignes. Bon enfin tout
ça pour dire que je le laisse juste en décoration et que
c'est l'exemple de ce qu'il ne faut pas faire. Enfin il marchait
à l'époque 1996 et que ça peut être un
façon d'appréhender Perl (je l'ai vu comme ça)
ensuite on raccourci, on compacte on va à l'essentiel ... et on
comprend plus rien. J'ai à ce propos écris il y à
quelque années un petit script qui créé un
traducteur Anglais-Français (trés pratique je m'en sers
tout les jours) mais je l'ai décortiqué et
commenté ligne/ligne, mot/mot et donc c'est mieux à titre
d'exemple que ce script des cavernes.
alain
J'ai écris
400der
pour rendre le fichier "releve_ccp_plus.html"
(téléchargé
sur
http://www.videoposte.com/videoposte/
au format html) compatible avec tous les tableur et bases de
données.
Ce fichier relate vos 400 derniéres opérations sur votre
ccp mais il est au format html (donc ingérable).
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 . r2h.pl
Alain Adelmar aadelmar@free.fr
#!/usr/bin/perl -w
#******************************************************************************
# remd: nettoyage des pages téléchargées depuis http://www.videoposte.com *
# (400 derniéres transactions ccp) au format html pour en sortir *
# 2 fichiers: un rapport (.txt) et un (.csv) plus une copie écran *
# d'autre part, possibilité d'intéroger le programme par numero de transaction*
# _ Ce Programme Fonctionne correctement _. *
# *****************************************************************************
# alain Adelmar commencer en nov 2000 ~ repris en juin 2002 *
#******************************************************************************
#*************sortie formater pour l'ecran
format
STDOUT_TOP
=
Page
@<<
$%
Date
Transaction
francs
euros
=====
==========================
========
======
.
# initialisation des variables.
$lmonnaie
= $le
=
$t =
$a
= $b
=
0;
$x
= "x*"
x
25;
#reconstruction des dates
$mois_v={
"janvier"
=>
"01",
"fevrier"
=>
"02",
"mars"
=>
"03",
"avril"
=>
"04",
"mai"
=> "05"
,
"juin"
=>
"06",
"juillet"
=>
"07",
"aout"
=>
"08",
"septembre"
=>
"09",
"octobre"
=>
"10",
"novembre"
=>
"11",
"decembre"
=>
"12"
};
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
= "./dsfa.txt"
;
$filoutcsv
= "dsfa.csv"
;
@nwcontenu;
@tcsv;
open(
F,
"$file")
or die
"merde pbOpsrc $!"
;
@contenu
= <
F>;
close
F or
die
"remerde pbfermsrc $!";
foreach
$ligne(@contenu
) {
$t++;
if
($t
<= 82
) {
if
($t
==
49)
{
$ligne
=~
s/^.{74}()/$1/;
$dds
=
$ligne;
#date debut solde
(
$jour_S,
$mois_S,
$annee_S)
= split
(/\s/,
$dds);
$annee_D
= (
$annee_S-1
);
print
"\nPeriode recensant 400 transactions de $annee_D jusqu au $jour_S $mois_S $annee_S\n"
;
}
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;
#**********
&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);
#***********
$ligne
= $ligne
.
" euro\n";
$b++;
}
}
# reconnaitre le champ date.
elsif
($ligne
=~
m/^\d{2}\/\d{2}/)
{
#*******format
$ldt
=
$ligne;
chomp
$ldt;
#******pour csv
&
routine4csv(
$ligne);
#*********** pour la presentation du fichier txt
$ligne
=
$ligne
. "\t"
;
}
elsif
($ligne
=~
m/^.*?\w.?/)
{
#**********format
$ldg
=
$ligne;
chomp
$ldg;
#**********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 ça
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"
;
print
"$x\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
.
# Je prevois de pouvoir ouvrir plusieurs fichiers de maniére
# à pouvoir centraliser sur un seul rapport tout les fichiers téléchargés.
END;
précédant |
suivant
| sommaire