Il y a des fois ou on aimerait bien reprendre ses comptes en main, et analyser le tout au travers d’un tableur par exemple.
je suis à la banque CIC et à ce titre j’ai accès à l’historique de mes comptes…en pdf.
ce qui n’est pas forcément le meilleur format à insérer dans un tableur. voici une méthode pour convertir ces fichiers PDF en CSV, importables dans n’importe quel tableur.
premièrement, installer pdftohtml, il existe des versions pour Windows ou Linux.
deuxièmement, télécharger les fichiers PDF contenant vos extraits de compte. Je vous conseille retirer les espaces dans le nom des fichiers afin de pouvoir les traiter plus facilement.
pour convertir en html (étape nécessaire), on va lancer la commande suivante :
$ for i in *.pdf do pdftohtml.exe -c -i -noframes $i ${i}.html done
sous windows, la commande est :
FOR /F "tokens=*" %G IN ('dir /b *.pdf') DO pdftohtml.exe -c -i -noframes "%G" "%G.html"
ensuite, on va convertir les fichiers HTML en CSV grâce au script suivant
#!/bin/bash account=$1 shift 1 solde="0" thestart="CONTRAT PERSONNEL GLOBAL N.* ${account} en euros" end="<b>SOLDE" nbdate=0 linenbr=1 date1= date2= tmpone=tmp_1 tmptwo=tmp_2 function csvout () { # Important : this test must done first in this function if [ -z "$fnbline" ] ;then refsolde=$solde else refsolde="F${fnbline}" fi fdate="$1" fdateval="$2" flibelle="$(echo "$3" |sed -e 's/[ ]*[ ]/ /g' -e 's/^[ ]*[ ]//' -e 's/"//g' -e 's/ //g' -e 's/;/,/g')" flibelle2="$(echo "$flibelle" |sed -e 's/^PAIEMENT CB [0-9][0-9][0-9][0-9] //' -e 's/ CARTE [0-9]*[0-9]$//')" fdebit="$(echo "$4" |sed 's/\.//g')" fcredit="$(echo "$5" |sed 's/\.//g')" fnbline="$6" fsolde="=SOMME(${refsolde}+G${fnbline})" fdiff="=SOMME(E${fnbline}-D${fnbline})" echo "${fdate};${fdateval};${flibelle2};${fdebit};${fcredit};${fsolde};${fdiff};${flibelle};" } # header echo "Date;Date de valeur;Libelles;Debits;Credits;Solde;Differentiel;Full libelle;Categorie;" while [ "${#}" -ne "0" ] do src="$1" shift awk "/${thestart}/,/${end}/" "$src" | \ sed 's/<DIV style="position:absolute;top:[0-9]*[0-9];left://g' > $tmpone # class name identification for interesting datas classname="$(egrep "\">[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]</span>" $tmpone |tail -1 |cut -d'"' -f3)" grep "<span class=\"${classname}\">" $tmpone |\ sed "s/\"><nobr><span class=\"${classname}\">/:/g" |\ sed 's@</span></nobr></DIV>.*@@' > $tmptwo while read theline do decalage=$(echo "$theline" |cut -d: -f1) contents=$(echo "$theline" |cut -d: -f2-) # date traitment if [ "$(echo "$contents" |grep -c "^[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]$")" -ge "1" ]; then case $nbdate in 0) # If nbdate is 0, we are in the start of datas nbdate=1 # If date2 is set, we just are in a new line of datas, If not, it is the first line we work on in this script [ -n "$date2" ] && csvout "$date1" "$date2" "$data" "$debit" "$credit" "$linenbr" linenbr=$(( $linenbr + 1 )) date1="$contents" data= ;; 1) nbdate=0 date2="$contents" ;; esac # label traitment elif [ "$(echo "$contents" |egrep -c "[- a-zA-Z]|^[0-9]*[0-9]$")" -ge "1" ]; then [ -n "$(echo "$contents" |grep "^Réf : [0-9]*[0-9]$")" ] && continue data="$data $contents" # amount traitment else debit= credit= if [ "$decalage" -lt "700" ]; then debit=$contents else credit=$contents fi fi done < $tmptwo done # flush of the last datas csvout "$date1" "$date2" "$data" "$debit" "$credit" "$linenbr" # cleaning rm $tmptwo rm $tmpone
Pour le lancer rien de plus simple, il vous faudra juste votre numéro de compte à mettre en argument étant donnée qu’un extrait de compte peut contenir plusieurs de vos comptes, il faut bien les délimiter.
vous trouverez votre numéro de compte dans le fichier PDF d’origine.
exemple d’utilisation :
$ ./convert.sh 00030051808 *.html |tee converted.csv
vous noterez que le script prépare déjà les données pour une insertion dans un tableur en calculant les différents champs Solde et Différentiel. facile ensuite d’utiliser l’outil groupe de pilote (LibreOffice) ou rapport de données croisées dynamique (Microsoft Office) pour générer des rapports complets ou même encore des graphiques toujours très parlant.
conseil: prenez le solde du premier fichier PDF que vous convertissez et intégrez le dans le script en remplaçant la variable « solde »
PS: ce script est loin d’être parfait mais il fonctionne chez moi, pour mon besoin.
il se peut que vous ayez un problème de reconnaissance du champs contenant la somme débitée ou créditée car au début, j’ai trouvé plus simple d’identifier ce champs par son contenu, mais il serait plus avisé peut être de calculer ce champs par rapport à son emplacement (valeur de left: dans la ligne).
au pire, si ça ne fonctionne pas chez vous, laissez un petit message pour que je corrige ce qui ne va pas.
Merci pour le script, c’est exactement ce que je voulais faire et après quelques modifications ça fonctionne.
Ha merci pour ces infos, ça m’a fait gagner pas mal de temps 🙂
J’ai dû modifier quelques lignes du script pour que ça marche, voici ma version :
content que ça ait pu aider 😉
Furrealz? That’s masllvourey good to know.
Very informative and trustworthy blog. Please keep updating with great posts like this one. I have booked marked your site and am about to email it to a few friends of mine that I know would enjoy reading
I enjoy you because of your whole efforts on this blog. Ellie take interest in conducting investigation and it is obvious why. We hear all of the compelling method you provide very useful tips through the web blog and even invigorate contribution from website visitors on this topic while my princess has been understanding so much. Take pleasure in the remaining portion of the year. Your doing a useful job.