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/&quot;//g' -e 's/&nbsp;//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.

 Laisser un commentaire

(requis)

(requis)

Vous pouvez utiliser ces tags et attributs HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

   
© 2011 Unix Open Suffusion theme by Sayontan Sinha