r400h.pl

Releve_ccp_plus.html vers rapport écran + fichier.txt + fichier.csv + possibilité intérroger le prog par numéro de transaction et par date

alain Adelmar
aadelmar@numericable.fr beuuh c est quoi ca

J'ai écrit ce programme (r400h.pl) pour l'environnement Linux, il y a une version pour l'environement Windows (r400W).
C'est la dernière version, elle permet de questioner le rapport de vidéoposte (vos 400 derniéres transactions) téléchargable  depuis http://www.videoposte.com/videoposte/ Ce programme vous permettra aussi de disposer de ces transactions, en effet il vous fera trois copies sous des formats différants.
Un fichier rapport texte au format TXT ouvrable dans n'importe quel éditeur de texte.
Un fichier db/txt au format CSV séparé par des virgule, une transaction par ligne, ouvrable par vos tableurs et base de données.
Et pour finir un rapport écran imprimable et une interaction quand à la possibilité de consulter les transactions par leur numéro ainsi que par leurs date.

  • Pour utiliser ce code source, couper et coller le code suivant dans un éditeur, sauver sous r400h.pl puis rendez le exécutable en tapant dans votre shell (interpreteur de commande) :
  • [al @al /al]$ chmod +x r400h.pl
  • puis lancer le programme en tapant:
  • [al @al /al]$ ./r400h
  • et suivez les instructions.
  • Ce script est lui aussi tré vieux et surtout le premier script que j'ai écris. Je suis convaincu qu'il peut être écrit sur 5 lignes, en plus propre. Je le laisse car il me servira surement pour faire une différentiation entre avant et apré. Alain Adelmar


    #!/usr/bin/perl -w
    # remd: netoyage de page (releve_ccp_plus.html) puis en sortir 2 fichiers:
    # un txt qui est un rapport des opérations (une par ligne)
    # l'autre est un .csv directement chargable depuis excel
    # puis création d'une possible recherche de transaction par son numero
    # ._  Fonctionne correctement _.
    #
    # alain Adelmar aadelmar@wanadoo.fr
    # commencer en 11/00  revision 07/01
     

    format STDOUT_TOP =
    Page @<<
    $%

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

    # initialisation des variables.
    $lmonnaie = $le = $t = $a = $b = 0;
    $x = "x*" x 25;
    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 = "./dsf.txt";
    $filoutcsv = "dsf.csv";
     

    # @ttr400ccp = ([@tdate], [@tfrancs], [@teuro], [@tdesign]);
     

    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.
        $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;
     #*****tabl @tfrancs
     push @tf, $ligne;  # liste tfrancs
     #**********
     &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);
     #************
     push @te, $ligne; # ass de la liste teuro.
     $ligne = $ligne . " euro\n";
     $b++;
          }
        }

        # reconnaitre le champ date.
        elsif ($ligne =~ m/^\d{2}\/\d{2}/) {
          #*******format
          $ldt = $ligne;
          chomp $ldt;
          #*******placer dans tableau
          push @tdt, $ligne;
          #******pour csv
          &routine4csv($ligne);
          #*********** pour la presentation du fichier txt
          $ligne = $ligne . "\t";
        }
        elsif ($ligne =~ m/^.*?\w.?/) {
          #**********format
          $ldg = $ligne;
          chomp $ldg;
          #**********tableau design
          push @tdg, $ligne;
          #**********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 = <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";
     

      #=========par les differentes listes et index
      print "$x\n";
      print "mais aussi par les listes\n";
      $date = $tdt[$rq-1];
      $lbl = $tdg[$rq-1];
      $f = $tf[$rq-1];
      $e = $te[$rq-1];

      print "transaction $rq:\n$date\n$lbl\n$f\n$e\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
    .

    END;