#!/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 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";
  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;

