précédent | suivant | sommaire

traitement de fichier avec Perl        



Ou comment convertir un fichier .shtml en plusieurs rapports, fichier et formater à l'écran. En dégager les données et les placer dans les variables listes ou hashages.
Une de mes plusieurs tentatives, seulement comme écrite sur Scite.exe je pense que le script en couleur est faux (car scite bouffe des espaces vides, des blancs) enfin pour étudier le script c'est bien mieux en couleurs. Alain Adelmar


 
 

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

formatSTDOUT_TOP=
Page@<<
$%

DateTransactionfrancseuros
=============================================
.
 

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 de hash et de la liste de liste.
# choix d'un numéro unique indexé sur la date de création du fichier source.
#$da = abs((stat($file)[10])/ 86400);  #absol jours depuis création
#$u = $da-$a;     #idem moins $a
 

$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")ordie"merde pbOpsrc $!";
@contenu=<F>;
closeFordie"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.
nextif($ligneeq"");# 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;
$te{$a}=$ligne;#ajoute un element a %teuros.
write;

# assignation d'une ligne de transaction
@ltr=qw($ld $lf $le $ldg);
$lstr[$a]=[@ltr];

# $lstr[$a] = (["$ld","$lf","le","$ldg"]);
 

#************
$ligne=~s/,/./;
$ligne=$ligne."\n";
tlib_csv($ligne);
$b++;
}
}

# reconnaitre le champ date.
elsif($ligne=~m/^\d{2}\/\d{2}/){
$td{$a}=$ligne;#ajoute un element a %tdates.
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;
}
}

subtlib_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")ordie"merde pbOpcible $!";
printFO@nwcontenu;
closeFOordie"rem pbfermcible $!";

open(FV,">$filoutcsv")ordie"mutain de poine ca couille pbOpfls $!";
printFV@tcsv;
closeFVordie"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>);
#$linep = $tt{$numt};
$linep=$lstr[$numt];

print"transaction\t $linep\n";
print"voulez vous continuer ? [o-n]\n";
chomp($resp=<STDIN>);
}
 

print"tchao !!\n";

#-------------- oui-non -----faire une routine qui renvoie 1 si oui
suboui_non{
my($rep)=@_;

$rep=~s/\W.*//;
$resp=~tr/A-Z/a-z/;
if($rep=~/^o|y/){
return0;# faux pour while(! oui_non($resp))
}
else{
return1;# vrai pour sortir
}
}

formatSTDOUT=
@<<<<<@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<@<<<<<<<<@<<<<<<<
$ldt, $ldg, $lf, $le
.

END;

retour en haut de la page


précédent | suivant | sommaire