précédant | suivant | sommaire


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 .

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}&nbsp/) {
            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;


précédant | suivant | sommaire