#!/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 = ; chomp $file; unless (-e $file) { print "veuillez entrer un nom de fichier valide\n"; $file = ; chomp $file; } $filout = "./dsfa.txt"; $filoutcsv = "dsfa.csv"; @nwcontenu; @tcsv; open(F, "$file") or die "merde pbOpsrc $!"; @contenu = ; 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 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 = ; #-------- 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 = ; 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 = ; } 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;