S'abonner à un site qui n'affiche ni pub ni articles "sponsorisés", ne vend pas vos emails ou vos profils n’est pas une option, c’est la seule solution pour que demain il existe encore ! Soutenez MedShake, abonnez-vous ou faites un don ! [message masqué aux abonnés]

Secret de fabrication : importer une annale QCM dans une base de données MySQL (ou ailleurs)

Publiée le par

logo billet
logo billet
Il y a une chose que j'aime autant que les belles bases de données, ce sont les expressions régulières. C'est un domaine assez complexe que je n’appréhende pas encore totalement, mais qui permet de faire des choses extraordinaires et gagner un temps fabuleux !
Ici, un petit exemple sur comment importer le PDF d'une annale de QCM d'internat en pharmacie dans une base de données.
Pour commencer, rendez-vous sur le site du CNCI à la page des annales du concours d'internat en pharmacie.

Choisissez au hasard l'annale de QCM 2011 de la zone nord ;-) (Je base cet exemple là-dessus).

Ouvrez le PDF téléchargé et faites un copier-coller de l'ensemble (ctrl A ou cmd A sous Mac OS).

Copiez le tout dans un éditeur de texte qui a un peu de bouteille. J'utilise pour ce genre de tâche l’excellentissime TextWrangler sous Mac OS.



Supprimez ensuite ce qui ne nous intéresse pas :
- le texte en début de document.
- le texte au niveau des sauts de page : recherchez-remplacez (cmd F) "EPREUVE DE Q.C.M. - 2011 - ZONE NORD" par rien.



C'est maintenant que tout se joue :

1) Première étape : corrigez les sauts de lignes un peu anarchiques dans la source et recherchez-remplacez "\n" par un espace.



Tout votre texte est maintenant sur une seule ligne.



2) Deuxième étape : remettez de l'ordre et recherchez-remplacez "QUESTION N° " par "\nQUESTION N° ".



Vous obtenez ainsi une question par ligne dans votre fichier texte. On y voit plus clair et ça aide pour la suite.



3) Troisième étape : échappez les guillemets présents dans le texte de l'énoncé, recherchez-remplacez """ par "\""



4) Quatrième et dernière étape : faites le grand tri et formatez votre fichier pour en faire une chaine d'insertion MySQL





Voilà, c'est presque terminé !

Vous ajouterez devant le début du texte quelque chose comme ça : "insert into qcm (annee,zone,idqcm,type,q,a,b,c,d,e) values " et vous n'oublierez pas de transformer la dernière virgule en bas du document en point-virgule.

Un copier-coller plus tard dans phpMyAdmin et vous aurez les 60 questions de cette annale dans votre table "qcm" de base de données.

Temps passé ? Moins de 2 minutes.
Je vous laisse imaginer la même opération en faisant des copier-coller ...
Les vrais experts auront surement une solution encore plus optimisée, mais je publie celle-ci qui n'est déjà pas si mal :D
Ils remarqueront aussi quelques lacunes très largement non commentées ;-) (Il n'y a pas de trim des espaces devant et derrière les chaines de caractère qui constituent les questions et les réponses. Pour ça une simple commande SQL suffira en fin de processus).