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}&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 ç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