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} /){
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....
sommaire
» programmation
» linux
+ perl » exemple