#!/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";
$z = 0;


$filout = "./log_a.txt";
$filoutcsv = "log400tr.csv";

#----------- construction du hash et de la liste de liste.
# non deux hash: un sur la date,valeur de la ligne
# l'autre sur la désignation valeur de la ligne.


$t = 0;         # compte les lignes (en dur) du fichier source.
$a = $b = 0;        # francs ou euro (initialisation des tab & ls, nmb de tr).

@nwcontenu = <FO>;   # assigne la variable liste au handle FO.
@tcsv = <FV>;        # idem pour @tcsv à FV.



open(F, "$file") or die "merde pbOpsrc $!";
@contenu = <F>;
close F or die "remerde pbfermsrc $!";


foreach $ligne(@contenu) {
  
$t++;       # compte lignes et dégage la merde.
        
if ($t <= 82) {
                
print "#";
                
}
        
elsif ($t <= 83) {       # entete
                
$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.
        
        
# 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
                
chomp $ligne;        # ligne francs = $ligne
                
$lf = $ligne;
                
#**********
                
$ligne =~ s/,/./;
                
$ligne = $lcsv . ",";
                
tlib_csv($ligne);
                
#**********
                
$ligne = $ligne . " francs";
                
$a++;
                
}
            
else {
                
$ligne =~ s/().{1}nbsp.?//;
                
chomp $ligne;
                
$le = $ligne;
                
write;
                
#========table de hash par la date
                
$line = "$ldt" . "\t$ldg\t$lf\t$le\n"; 
                
%date = ("$ldt" => "$line");
                
                
#======
                
# assignation d'une ligne de transaction
                
@ltr = qw($ld $lf $le $ldg);
                
$lstr[$a] = (@ltr);        
                
#************
                
$ligne =~ s/,/./;
                
$ligne = $ligne . "\n";
                
tlib_csv($ligne);
                
$b++;
                
}
        
}
        
        
# reconnaitre le champ date.
        
elsif ($ligne =~ m/^\d{2}\/\d{2}/) {
                
chomp $ligne;
                
$ldt = $ligne;
                
tlib_csv($ligne);
                    
$ligne = $ligne . "\t";
                    
}

        
elsif ($ligne =~ m/^.*?\w.?/) {
            
chomp $ligne;
            
$ldg = $ligne;
            
tlib_csv($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";
                
}
        
}   
        
# dépose chaque element avec "\n" aprés euro.
        
push @nwcontenu, $ligne;
    
}
}

sub tlib_csv {
    
my($ligne) = @_;
    
$lcsv = $ligne;
    
$lcsv = $lcsv . ",";
    
push @tcsv, $lcsv;
}
    
print "\n$t lignes traitees pour $a operations enregistrees.\n";

#*********************************
# confection d'un fichier db





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";
        
chomp($numt = <STDIN>);
        
@lined = $date{$numt};
        
foreach ($meme_jour(@lined)) {
                
print "transaction\t $meme_jour\n";
        
print "voulez vous continuer ? [o-n]\n";
        
chomp($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;