csv.moodle {SARP.moodle} | R Documentation |
Convertir un fichier CSV, ODS ou XLSX en questions Moodle
Description
Cette fonction permet de convertir un fichier convenablement construit, en un fichier XML de questions pour Moodle
Usage
csv.moodle(fichier.csv,
colonne.texte = NA, colonne.reponse = NA,
colonne.note = NA, colonne.note_question = NA,
colonne.titre = NA,
colonne.code = NA, colonne.type = NA,
colonne.retour = NA, colonne.global = NA,
colonne.penalite = NA,
colonne.temps = NA, colonne.decimale = NA,
fichier.xml = if ( TRUE == nv.fichier ) gsub(
"\\.[Cc][Ss][Vv]$",
".xml", fichier.csv )
else get( "fichier.xml",
envir = SARP.Moodle.env ),
nv.fichier = TRUE,
creer.titre = TRUE, lg.titre = 30,
embellir = TRUE, deja.HTML = FALSE,
forcer.multiple = TRUE, melanger.reponses = TRUE,
somme.nulle = FALSE, precision = 3,
categorie.base = "",
dossier.images = dirname( fichier.csv ),
sep.images = c( '@@', '@@' ), inserer.images = TRUE,
sep.formules = c( '@\\$', '\\$@' ),
sep.SMILES = c( '@\\{', '\\}@' ),
sep = if ( extension == "txt" ) "" else ";",
header = TRUE, quote = '\"',
... )
ods.moodle( fichier.ods, onglet = NA,
colonne.texte = NA, colonne.reponse = NA,
colonne.note = NA, colonne.note_question = NA,
colonne.titre = NA, colonne.code = NA, colonne.type = NA,
colonne.retour = NA, colonne.global = NA, colonne.penalite = NA,
colonne.temps = NA, colonne.decimale = NA,
fichier.xml = if ( TRUE == nv.fichier ) gsub( "\\.[Oo][Dd][Ss]$",
".xml",
fichier.ods )
else get( "fichier.xml", envir = SARP.Moodle.env ),
nv.fichier = TRUE,
creer.titre = TRUE, lg.titre = 30, embellir = TRUE, deja.HTML = FALSE,
forcer.multiple = TRUE, melanger.reponses = TRUE, somme.nulle = FALSE,
precision = 3,
categorie.base = "",
dossier.images = dirname( fichier.ods ),
sep.images = c( '@@', '@@' ), inserer.images = TRUE,
sep.formules = c( '@\\$', '\\$@' ),
sep.SMILES = c( '@\\{', '\\}@' ),
... )
xlsx.moodle( fichier.xlsx, onglet = NA,
colonne.texte = NA, colonne.reponse = NA,
colonne.note = NA, colonne.note_question = NA,
colonne.titre = NA, colonne.code = NA, colonne.type = NA,
colonne.retour = NA, colonne.global = NA, colonne.penalite = NA,
colonne.temps = NA, colonne.decimale = NA,
fichier.xml = if ( TRUE == nv.fichier ) gsub( "\\.[Xx][Ll][Ss][Xx]$",
".xml",
fichier.xlsx )
else get( "fichier.xml", envir = SARP.Moodle.env ),
nv.fichier = TRUE,
creer.titre = TRUE, lg.titre = 30, embellir = TRUE, deja.HTML = FALSE,
forcer.multiple = TRUE, melanger.reponses = TRUE, somme.nulle = FALSE,
precision = 3,
categorie.base = "",
dossier.images = dirname( fichier.xlsx ),
sep.images = c( '@@', '@@' ), inserer.images = TRUE,
sep.formules = c( '@\\$', '\\$@' ),
sep.SMILES = c( '@\\{', '\\}@' ),
... )
Arguments
fichier.csv , fichier.ods , fichier.xlsx |
Un vecteur de chaînes de caractères contenant les noms des fichiers à convertir. Chacun des fichiers est traité indépendamment, mais avec les mêmes valeurs des options qui suivent. |
onglet |
Le numéro, ou le nom, de la feuille (onglet) du classeur LibreOffice ou Excel à convertir. S'il n'est pas indiqué, toutes les feuilles seront converties. |
colonne.texte |
Le nom ou le numéro de la colonne qui contient l'énoncé des questions. |
colonne.reponse |
Le nom ou le numéro de la colonne qui contient la ou les réponses aux questions. |
colonne.note |
Le nom ou le numéro de la colonne qui contient la note associée à chaque réponse. Si elle n'est pas indiquée, une colonne intitulée « Note » (insensible à la casse) est cherchée dans le fichier. Cette colonne est obligatoire en cas de question à réponses multiples. Elle peut alors contenir soit le pourcentage de la note (voir les détails), soit « Vrai » ou « Faux » (insensible à la casse) et les pourcentages sont calculés en conséquence (avec toujours 0 pour « Faux »: indiquez explicitement un pourcentage négatif si nécessaire). |
colonne.note_question |
Le nom ou le numéro de la colonne qui contient la note globale de la question. Si elle n'est pas indiquée, une colonne intitulée « Note question » (insensible à la casse) est cherchée dans le fichier. Cette colonne est facultative. Si elle existe, elle doit contenir un entier strictement positif donnant la note globale de la question, ou rester vide. Toute note non indiquée sera supposée égale à 1 (valeur par défaut de Moodle). |
colonne.titre |
Le nom ou le numéro de la colonne qui contient le titre à donner à
la question dans Moodle. Si elle est manquante, le titre est
construit, sous la forme |
colonne.code |
Le nom ou le numéro de la colonne qui contient le code de la
question. Cette colonne n'est obligatoire que pour créer des
questions « cloze ». Si elle est manquante, un code interne de la
forme |
colonne.type |
Le nom ou le numéro de la colonne qui contient le type de la
question. Cette colonne peut être utilisée pour indiquer qu'une
question avec plusieurs réponses proposées n'a qu'une seule réponse
possible, en indiquant QCU pour au moins une des réponses (question
à choix unique); QCM permet d'indiquer que l'on peut cocher
plusieurs réponses (question à choix multiples). Dans ce cas,
|
colonne.retour |
Le nom ou le numéro de la colonne qui contient le commentaire à afficher pour chaque réponse. Cette colonne est facultative. |
colonne.global |
Le nom ou le numéro de la colonne qui contient le commentaire à afficher globalement pour la question. Cette colonne est facultative. |
colonne.penalite |
Le nom ou le numéro de la colonne qui contient la pénalité à mettre en cas de nouvelle tentative de la question. Si elle n'est pas indiquée, une colonne intitulée « Pénalité » (insensible à la casse) est cherchée dans le fichier. Cette colonne est facultative. Si elle existe, elle doit contenir la fraction de la note globale de la question qui sera prise en compte pour noter la nouvelle tentative (par exemple, si la question a une note globale de 2 et la pénalité est de 0,5, à la seconde tentative la note maximale possible sera de 1) ou rester vide. Toute pénalité non indiquée sera supposée égale à 1 (pas de pénalité en cas de nouvelle tentative). |
colonne.temps |
Le nom ou le numéro de la colonne qui contient le temps conseillé pour la question. Cette colonne est facultative. |
colonne.decimale |
Le nom ou le numéro de la colonne qui contient le nombre de chiffres après la virgule attendu pour la réponse à la question (pour les questions numériques uniquement). Cette colonne est facultative. |
fichier.xml |
Le nom du fichier XML à créer ou un fichier XML déjà créé avec
|
nv.fichier |
Une valeur logique indiquant si l'on veut créer un nouveau fichier
( |
creer.titre |
Une valeur logique indiquant si l'on veut créer un titre pour chaque
question, à partir de son code et du début de son énoncé
( |
lg.titre |
Le nombre de caractères de l'énoncé d'une question à conserver pour
construire son titre. Ignoré si une colonne de titres a été fournie
ou si |
embellir , deja.HTML |
Actuellement inutilisés, prévus pour une version future |
forcer.multiple |
Si |
melanger.reponses |
Si |
somme.nulle |
Cette option précise comment gérer les réponses incorrectes dans un
QCM. Si |
precision |
Le nombre de décimales à donner dans la réponse, pour
une réponse numérique (utilisez |
categorie.base |
La catégorie de base à utiliser pour créer les questions. Elle contiendra toutes les sous-catégories du fichier, s'il y en a. |
dossier.images |
Le dossier d'image où trouver les images à
intégrer au fichier XML, ou l'URL de base pour les trouver dans
Moodle (voir |
sep.images |
Les codes servant à encadrer un nom d'image dans les textes du fichier CSV. |
inserer.images |
Si |
sep.formules |
Les codes servant à encadrer une formule mathématique à convertir grâce à latex dans les textes du fichier CSV. |
sep.SMILES |
Les codes servant à encadrer un code SMILES à convertir en formule chimique grâce à openbabel dans les textes du fichier CSV. |
sep , header , quote |
Options pour |
... |
Autres options pour |
Details
Ces fonctions réalisent la conversion d'un ou plusieurs fichiers structurés de questions pour Moodle en un fichier XML. La nature des questions est déduite de la structure du fichier. Le fichier peut être au format CSV (format recommandé), Libre Office Calc (ODS) ou Excel (XLSX). Dans les deux derniers cas, il est possible de convertir toutes les feuilles du classeur ou juste une partie. Chaque feuille à convertir doir avoir la structure décrite ci-après, correspondant au format du fichier CSV.
Le fichier doit comporter au moins deux colonnes : l'une avec les énoncés des questions et l'autre avec les réponses. Chaque ligne correspond à une réponse possible.
Pour les questions simples, la question tient sur une ligne. La nature
de la question est déduite de la réponse. Si la réponse peut être
convertie en nombre, la question est supposée être une réponse
numérique; elle sera créée avec un appel à
numerique.moodle
. Si la réponse est identifiée comme
une valeur logique (un des textes « V », « F », « T », « Vrai », «
Faux », « True » ou « False », quelle que soit la casse), la question
est supposée être une question binaire avec les deux réponses « Vrai »
et « Faux »; elle sera créée avec un appel à
vrai_faux.moodle
. Dans tous les autres cas, la question
est supposée être à réponse ouverte et courte et sera créée par un
appel à qroc.moodle
. Par défaut, la réponse est sensible
à la casse; cela peut être modifié en indiquant « I » dans la colonne
précisant le type de question.
S'il y a un énoncé, mais pas de réponse, cet énoncé est supposé être
une indication de catégorie (sauf si la question a le même code qu'une
question « cloze », voir plus loin, ou si la colonne précisant le type
de question indique un type particulier) qui sera créée comme une
sous-catégorie de la catégorie de base, par un appel à
categorie.moodle
. Si une colonne précise le type, la
question peut être de type rédactionnel (réponse libre dans un éditeur
de texte, pas de correction automatique; type « R »,
question_ouverte.moodle
), description (un texte
s'affiche, mais aucune réponse n'est attendue; type « D »,
description.moodle)
ou texte à trou (il faudra replacer
les textes dans les trous de l'énoncé, les trous étant construits à
partir des termes encadrés par des [[doubles crochets]]); type « T »,
glisser_textes.moodle
)
S'il y a une réponse, mais pas d'énoncé, cette réponse est supposée
être une autre réponse possible à une question à choix multiple, dont
l'énoncé est dans la première ligne précédente qui en contient un.
Dans ce cas, le fichier doit contenir une colonne qui contient les
notes associées à chaque réponse. Cette note peut être précise,
exprimée en pourcentage suivant la convention Moodle, ou indicative,
avec la simple mention « Vrai » pour les bonnes réponses et « Faux »
pour les mauvaises. Dans le deuxième cas, les bonnes réponses sont
associées à l'inverse du nombre de bonnes réponses, de sorte que
cocher toutes les bonnes réponses donne la note totale; les mauvaises
réponses sont associées à la note 0 (si somme.nulle=FALSE
:
cocher ou non ces réponses ne change rien à la note) ou à l'opposé de
l'inverse du nombre de mauvaises réponses (si somme.nulle=TRUE
:
cocher ces réponses diminue la note et cocher toutes les réponses
donne une somme nulle). Par défaut, la question construite est
toujours un QCM (plusieurs réponses peuvent être choisies), même s'il
y a une seule bonne réponse. Pour demander qu'une seule réponse puisse
être choisie (QCU), indiquez le type QCU dans la colonne indiquée par
colonne.type
pour la question considérée. Si vous voulez que
toutes les questions avec une seule bonne réponse soient en QCU, vous
pouvez aussi utiliser l'option forcer.multiple = FALSE
.
Construire des questions “cloze”
Pour pouvoir construire des questions “cloze”, le fichier doit obligatoirement contenir une colonne qui indique le code de chaque question (y compris les catégories). Ce code doit être unique pour une même question; toutes les lignes qui auront le même code seront donc considérées comme faisant partie de la même question.
De ce fait, si plusieurs lignes d'énoncé renseignées ont le même code,
elles sont considérées faisant partie de la même question et sont
utilisées pour construire une question “cloze”, selon le
même principe que la fonction question_libre.moodle
:
après chaque partie d'énoncé, un champ de réponse est créé, dont la
bonne réponse est celle indiquée dans la colonne
colonne.reponse
et sert à définir le type de champ de réponse
(selon la logique des questions en une ligne). Pour avoir un texte
après le dernier champ de réponse, laissez la colonne
colonne.reponse
vide tout en gardant le même code de question.
Pour avoir des questions avec réponse à choisir dans une liste, mettez
une réponse par ligne sans mettre d'énoncé avant, comme pour un QCM.
La colonne colonne.type
permet de préciser le type d'affichage,
avec les codes Moodle (MULTICHOICE
, MULTICHOICE_S
...).
Il est possible d'abréger le code: M correspond à un choix dans un
menu déroulant (une seule réponse possible ; MULTICHOICE
) ; H,
à des réponses juxtaposés (MULTICHOICE_H
) ; V, à des réponses
superposées (MULTICHOICE_V
) ; SA, à un champ libre attendant
une réponse courte, de type Q. R. O. C. (SHORTANSWER
). Pour
les réponses superposées ou juxtaposés, par défaut, une seule réponse
peut être choisie et l'ordre est celui indiqué dans le fichier. Il est
possible d'indiquer que plusieurs réponses peuvent être choisies en
ajoutant le code M (VM, HM) ; il est possible de demander à Moodle de
tirer au sort l'ordre des réponses en ajoutant le code A (MA, VA,
VMA...) ou S (MS, VS...). Pour le champ libre, par défaut la casse
est ignorée. Il est possible d'indiquer que la casse doit être
contrôlée grâce au code SAC (SHORTANSWER_C
). L'ordre des codes
n'a pas d'importance (HM et MH donneront tous deux une question de
type MULTICHOICE_H
).
Insérer des images
Il est possible de faire référence à une image dans les textes
(énoncés, réponses, commentaires) en encadrant le nom de fichier de
l'image par les séparateurs choisis, par défaut @@
. Il est
possible de redimensionner l'image en faisant suivre le nom de l'image
d'un point d'exclamation, puis de la largeur, du caractère x et de la
hauteur. Attention, il semblerait que Moodle ne déforme pas les
images, quelles que soient les dimensions demandées. Par défaut,
l'image sera incluse au fichier XML.
Deux types d'image peuvent être créés au vol : les formules
mathématiques et les formules chimiques. Voir les fonctions
inserer_formule.moodle
et
inserer_SMILES.moodle
pour plus de détails.
Value
De façon invisible, une liste des data.frames des questions après traitement de chaque fichier. Elle n'a guère d'autre intérêt que pour détecter l'origine d'un problème de conversion.
Attention!
Moodle est assez peu permissif pour les notes exprimées en pourcentage; en particulier, lorsque ce pourcentage ne tombe pas juste (33% pour trois bonnes réponses, par exemple), à cause de l'arrondi il peut rejeter le fichier créé. Dans ce cas, désactivez l'arrêt en cas d'erreur et demandez l'arrondi à la note la plus proche pour pouvoir importer les questions.
Author(s)
Emmanuel Curis emmanuel.curis@parisdescartes.fr
See Also
Les fonctions de base de création de questions pour plus de souplesse, et en particulier pour créer des questions non gérées par le format de fichier ci-dessus.
csv_optique.moodle
pour convertir des fichiers CSV au
format utilisé par les lecteurs optiques.
Examples
# Conversion du fichier d'exemple fourni
# (à placer dans le répertoire de travail)
## Not run:
csv.moodle( "exemple_Moodle.csv", colonne.code = "Code" )
## End(Not run)