suivant | présédant | sommaire

r2ccp.pl

par Alain Adelmar

Dernier script traduisant le fichier releve_ccp_plus.html ( vos 400 dernières opérations avec videoposte, la poste en ligne: http://www.videoposte.com/videoposte/ ), en 3 rapports de formats différant.

  1. Un rapport écran, formaté, intérogables interactivement par numero de transactions.
  2. Un rapport texte (.txt) formaté, détaillé, une transaction par ligne
  3. Un rapport (.cvs) ou chaque champ est séparé par un virgule (,) directement chargable par (Acces, Excel, et autre tableur).
Le script ci-dessous est écrit pour Linux, il fonctionne correctement. La vérsion pour environement Windows est en fin de document. Pour utiliser ce script, saisissez le texte approprié directement avec la souris, copier puis coller sur scite , notepad.exe ou l'éditeur de votre choix, enregistrez donc ce fichier au nom de r2ccp.pl (sous Windows dans C:\Perl\eg). Puis pour le lancer:

Sur Windows, en DOS tapez: C:\Perl\eg perl r2ccp.pl

Sur Linux ou UNIX taper d'abord: chomp +x r2ccp.pl

pour le rendre executable puis simplement: ./r2ccp.pl

N'hesiter pas à me contacter Adelmar Alain a.adelmar@wanadoo.fr


#!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
formatSTDOUT_TOP =
Page@<<
$%

Date Transaction francs euros
===== ========================== ======== ======
.

# initialisation des variables.
$lmonnaie = $le =$t =$a =$b = 0;
$x = "x*" x 25;

$dnow = (localtime[6]);

#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\net le chemin si il ne se trouve pas dans le repertoire actuel\n";
   $file = <STDIN>;
   chomp $file;
   }

$filout = "rapport_" . "$dnow" . '.txt';
$filoutcsv = "rapport_db_" . "$dnow" . '.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}&nbsp/) {
      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 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";
#ici début de la partie intéractive pour appelées tel ou telle transaction (par numérotation indexé)
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;

#fin du script pour Linux (copier jusque là) ou la ligne au dessus. Pour Windows voir au dessous retour en au de la page


Ci-dessous trouvez la version Windows Quasiment identique.

#!/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
formatSTDOUT_TOP =
Page@<<
$%

Date Transaction francs euros
===== ========================== ======== ======
.

# initialisation des variables.
$lmonnaie = $le =$t =$a =$b = 0;
$x = "x*" x 25;

$dnow = localtime[6];

#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 = "rapport_" . "$dnow" . '.txt';
$filoutcsv = "rapport_db_" . "$dnow" . '.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 ($ligneeq ""); # 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}&nbsp/) {
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 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";
#ici début de la partie intéractive pour appelées tel ou telle transaction (par numérotation indexé)
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;

retour en au de la page

Voilà, le rapport_db_date.cvs est directement compatible avec Access, Excel, Word ainsi que Gnumeric et tout les autre tableur et base de données, car chaque champs et séparé par une virgule (elle sert de délimiteur). Pratique non?

La prochaine version regroupera les transaction par date, puis par debit ou credit et enfin par Numéro de chéque émis. Je pense que ce sera un outils trés pratique et surtout instantané pour controler sa comptabilité. Pour plus d'ample explication écrivez moi.

Alain Adelmar      //        a.adelmar@wanadoo.fr


 suivant | présédant | sommaire | retour