sommaire » programmation » linux + perl » exemple


Un autre exemple du potentiel de Perl pour extraire du texte d'une feuille (.html),  le modifier, en sortant un rapport sur trois formats différents dont un exploitable depuis n'importe quel tableur. Il permet donc de rendre le fichier téléchargable depuis banque direct (la poste videoposte (vos 400 dernières transactions)) directement dans votre tableur préféré (excell, Access, gnumeric, etc...)
De plus il vous fait une copie écran, une texte (dans un fichier) et une autre csv (aussi dans un fichier). Il place les données dans des variables listes directement appelable depuis le programme. Il renomme aussi la copie qu'il travaille pour contenir la date dans le nom du fichier (pratique lorsqu'on veux en stocké plusieurs dans un même dossier). La prochaine version de ce script  sera un petit logiciel qui vous permettra de boucler votre comptabilité par mois ou par somme de même achats ex:
fichier comptabilité Janvier 99
fichier total dépenses Auchan 2000 ou
relevé des chèque émis 1er trimestre 2000
Voilà, le plus dur est fait (stockages des données) maintenant les sortir sous telle ou telle forme n'est pas compliqué. A plus
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'un hachache pour rechercher une operation dirrectement 
# par la date ou le montant ou le label, (voir ce dernier pas au point)
# alain adelmar commencer en nov 2000 ~ janvier 2001
# ce prog tourne bien que la table ne soit pas au point
# au fait il fait une copie de la source et renome l'autre par sa  date.
formatSTDOUT_TOP=
Page@<<
$%

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

print"Vous êtes ici\n";
do'ls'>><STDOUT>;

# rapide coup d'oeil au repertoire courant.

print"Entrez le nom du fichier a traiter\n";
$file=<STDIN>;
chomp$file;
if(-e$file){
#fait un double dans ~/perl/sauvegarde si il n'existe pas.
if(-e"/home/common/prog/perl/travail/sauvegarde/$file"){
print"atchung una mierda tiené lo mismo nombré, qué fa tio?\n";
print"va donc jeté un oeil!\nDois-je continuer ou veux tu jouer?\n";
chomp($resp=<STDIN>);
while(!continu($resp)){
print"Pense a un nombre entre 0 et 10\n";
$jb=0;
print"$jb j'ai perdu?\n";
$jb++;
chomp($resp=<STDIN>);
}
 print"bon alors on continu\n";
}
else{
print"je traite le fichier $file\n";
system"cp ./$file /home/common/prog/perl/travail/sauvgarde/$file";
wait();
# créer des fichier de sorties qui ont pour nom la date du jour
$dctime=(stat($file))[10];
$jtime=int($dctime/86400);
#$dsf = "$file" . "_" . "(localtime(time))[5]" . "(localtime(time))[6]";
$nfile=("rccp"."$jtime".".html");

rename("$file","$nfile")||
die"Impossible de renome $file: $!";
}
}


$filout="./dsf.txt";
$filoutcsv="dsf.csv";

#----------- construction du hash de hash et de la liste de liste.
#$t400trs{$a} = ([$tdates{$a}], [$tdesigns{$a}], [$tfrancs{$a}], [$teuros{$a}]);

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


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


open(F,"$nfile")ordie"merde pbOpsrc $!";
@contenu=<F>;
closeFordie"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.
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
$lf=$ligne;# ligne francs = $ligne
chomp$lf;
#*****tabl @tfrancs
push@tfrancs,$ligne;# liste tfrancs
#**********
$lcsv=$ligne;
$lcsv=~s/,/./;
$lcsv=$lcsv.",";
push@tcsv,$lcsv;
#**********
$ligne=$ligne." francs";
$a++;
}
else{
$ligne=~s/().{1}nbsp.?//;
$le=$ligne;
chomp$le;
write;
@trccps=([$ldt],[$ldg],[$lf],[$le]);

#************
$lcsv=$ligne;
$lcsv=~s/,/./;
$lcsv=$lcsv."\n";
push@tcsv,$lcsv;
#************
push@teuro,$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;
#*******tabl @tdate
push@tdate,$ligne;# assignation de la liste tdate
#************
  $lcsv=$ligne;
$lcsv=$ligne.",";
push@tcsv,$lcsv;
#************
$ligne=$ligne."\t";
}
elsif($ligne=~m/^.*?\w.?/){
#**********format
$ldg=$ligne;
chomp$ldg;
#**********tableau design
push@tdesign,$ligne;
#**********fichier csv
$lcsv=$ligne;
$lcsv=$lcsv.",";
push@tcsv,$lcsv;

#**********************************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;
}
}

subtlib_csv{
my($ligne)=@_;
push@tcsv,$ligne;
}

print"\n$t lignes traitees pour $a operations enregistrees.\n";

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


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

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";
$numt=<STDIN>;
chomp$numt;
@linep=$trccps[$numt];
print"transaction $numt = $linep\n";
print"voulez vous continuer ? [o-n]\n";
$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;



PS: je me suis rendu compte que de donner les scripts en couleur, agissé sur le formatage des lignes et des espaces disparraissés. J'ai réctifier cet inconvégnant mais pas sur tout les script perl donc attention....

retour en haut



sommaire » programmation » linux + perl » exemple