Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 24-05-2020 10:27:02

cemoi
Membre
Distrib. : Debian 10 Buster et une SID
Noyau : Linux 4.19.0-9-amd64
(G)UI : XFCE
Inscription : 21-10-2008

Reformater un .csv pour pouvoir l'importer dans moodle

Bonjour,
j'ai un export (d'un référentiel de diplomme) en .csv qui a été fait à partir de SacoChe https://sacoche.sesamath.net/ que je dois importer dans Moodle https://moodle.org/?lang=fr .

Le probléme c'est que moodle attend un certain formatage de ce .csv: un certain nombre de colonnes avec certain nom et des commentaire entre des balises html ...

Ce qu'attend Moodle: https://cloud-montpellier.beta.educatio … ZmcEabCLLm
L'export de SacoChe: https://cloud-montpellier.beta.educatio … e4fcx4eatX

Il existe une instance de demo de moodle ou on a un acces comme admin et donc la possibilité de tester l'importation/créer un référentiel: https://school.moodledemo.net/

J'ai 2 référentiels à faire:

https://cloud-montpellier.beta.educatio … e4fcx4eatX
https://cloud-montpellier.beta.educatio … 7BE4P4KPk2

Je voudrai éviter de faire des copiers/coller par milliers...

SacoCoche et Moodle sont présents sur quasi tous les les serveurs académique du coup l'intéret c'est de partager le script si vous arrivé à qqchose... ça fera économiser des milliers d'heures de copier/coller....

Merci! smile

Ps: la doc sur le module referentiel dans moodle:
https://docs.moodle.org/3x/fr/R%C3%A9f% … 3%A9tences
https://docs.moodle.org/3x/fr/mod/refer … t_instance

Dernière modification par cemoi (24-05-2020 11:44:21)


Linux debDesk Linux 4.19.0-9-amd64

Hors ligne

#2 24-05-2020 11:56:28

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Stretch
Noyau : Linux 4.9.0-2-amd64
(G)UI : Gnome + Console et un peu Openbox
Inscription : 20-03-2012
Site Web

Re : Reformater un .csv pour pouvoir l'importer dans moodle

Salut smile

T'aurais moyen de faire une correspondance entre les champs des deux formats ? Parce-que moi, ça ne me parle pas forcement le jargon Educ-nat (outil scripteur tout ça big_smile )

Après, ça sera probablement assez simple de scripter wink

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

En ligne

#3 24-05-2020 14:25:36

chalu
Modératrice
Lieu : Anjou
Distrib. : openSUSE Leap 15.2
Noyau : Linux 5.3.18
(G)UI : KDE 5.18.5
Inscription : 11-03-2016

Re : Reformater un .csv pour pouvoir l'importer dans moodle

Bonjour
Et en passant par un format xls ?

Hors ligne

#4 24-05-2020 14:29:59

Croutons
Membre
Distrib. : Debian10 Buster
Noyau : Linux 4.19.0-9-amd64
(G)UI : Mate
Inscription : 16-12-2016

Re : Reformater un .csv pour pouvoir l'importer dans moodle

Hello
le soucis c'est que la on peux rien comparer , il faudrait les mêmes données dans les 2 formatage pour voir les différences
plusieurs choix d'encodage pour fichier csv
https://sacoche.sesamath.net/index.php? … e_encodage

Dernière modification par Croutons (24-05-2020 14:36:33)


-->les cahiers du debutant<--      WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde

Hors ligne

#5 24-05-2020 16:56:34

cemoi
Membre
Distrib. : Debian 10 Buster et une SID
Noyau : Linux 4.19.0-9-amd64
(G)UI : XFCE
Inscription : 21-10-2008

Re : Reformater un .csv pour pouvoir l'importer dans moodle

Je commence à faire le référentiel dans Moodle avec les copiers collé et je vais faire un export ça vous permettra de voir comment doit être la structure pour un même jeux de données

Linux debDesk Linux 4.19.0-9-amd64

Hors ligne

#6 24-05-2020 16:58:11

bendia
Chadministrateur
Distrib. : openSUSE Tumbleweed, Stretch
Noyau : Linux 4.9.0-2-amd64
(G)UI : Gnome + Console et un peu Openbox
Inscription : 20-03-2012
Site Web

Re : Reformater un .csv pour pouvoir l'importer dans moodle

J'ai ouvert les deux jeux de données avec Libreoffice, et le constat est que le format de Moodle est hiérarchique quand celui de Sacoche est plat. De ce fait, je dirais que le csv n'est pas l'idéal pour représenter les données sous Moodle. Il semble que Moodle utilise le xml comme format d'import/export d'ailleurs.

Tu aurais moyen de nous mettre le même jeu de données Moodle en xml plutôt qu'en csv pour qu'on voir comment il est fait afin de le mettre en relation avec la doc ?

Ben
___________________
La seule question bête, c'est celle qu'on ne pose pas.

En ligne

#7 24-05-2020 17:41:03

cemoi
Membre
Distrib. : Debian 10 Buster et une SID
Noyau : Linux 4.19.0-9-amd64
(G)UI : XFCE
Inscription : 21-10-2008

Re : Reformater un .csv pour pouvoir l'importer dans moodle

eee je comprend pas j'ai pas la possibilité d'exporter le référentiel en xml à partir de moodle... ils disent afficher le bloc référentiel mais je n'ai aps de bloc référentiel... c'est certainement par ce qu'il n'y a pas de plugin de rajouté... c'est tres bizzard cette doc. Il y a beaucou pde format pour l'importation mais pour l'exportation (à partir de moodle) je n'ai pas de choix à part celui de csv.
La doc Moodle ne semble pas à jour... la version courante est 3.7.x et là ça parle pour la 2.0

J'ai commencé à copier/coller le référentiel des cap directement dans moodle et je l'ai exporté (j'ai pas eu de choix sur le format...) voila ce que ça donne:
https://cloud-montpellier.beta.educatio … i6kdjPqeTY
à comparer avec:
https://cloud-montpellier.beta.educatio … e4fcx4eatX

Dernière modification par cemoi (24-05-2020 17:49:18)


Linux debDesk Linux 4.19.0-9-amd64

Hors ligne

#8 24-05-2020 20:23:19

cemoi
Membre
Distrib. : Debian 10 Buster et une SID
Noyau : Linux 4.19.0-9-amd64
(G)UI : XFCE
Inscription : 21-10-2008

Re : Reformater un .csv pour pouvoir l'importer dans moodle

Le lien sur la doc de la 3.7 précise bien qu'il n'y a plus que l'export en .csv
https://docs.moodle.org/37/en/Competency_frameworks

Linux debDesk Linux 4.19.0-9-amd64

Hors ligne

#9 26-05-2020 16:28:45

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : Reformater un .csv pour pouvoir l'importer dans moodle

C'est tout à fait possible de passer d'un format à l'autre,
je dois pouvoir pour ma part, bricoler un truc avec python et ses bibliothèques pandas et re.
Et il y a sûrement des dizaines d'autres façon de faire, je suis sûr qu'on peut faire ça en une ligne avec un awk. smile
Mais au regard des fichiers, on a un peu de mal à établir les correspondances.
je vois bien qu'il y a des truc comme, C1.1.2 => C112, séparer un champs vers 2 champs,
cependant, pour certains, je vois pas bien, il y a des truc qui ne correspondent pas,

In [25]: import pandas as pd                                                                                                                                              

In [26]: df_input = pd.read_csv('export_listing-items_MEN(1).csv')                                                                                                        

In [27]: df_input                                                                                                                                                        
Out[27]:
     ITEM_ID                        MATIERE  ...                                         SOCLE_2016                                        COMMENTAIRE
0        NaN                            NaN  ...                                                NaN                                                NaN
1      979.0  Technicien menuisier agenceur  ...                                        Hors-socle.  Conditions:Dossier technique, Modèle 3D, Maque...
2      980.0  Technicien menuisier agenceur  ...                                        Hors-socle.  Conditions: Plans d’architecte, Plan d’ensembl...
3      981.0  Technicien menuisier agenceur  ...                                        Hors-socle.  Conditions: Plans, Normes de représentation gr...
4      982.0  Technicien menuisier agenceur  ...                                        Hors-socle.  Conditions: Plans d’architecte, Plan d’ensembl...
..       ...                            ...  ...                                                ...                                                ...
108   1092.0  Technicien menuisier agenceur  ...                                        Hors-socle.  Conditions:\nConsignes orales et/ou écrites\nM...
109   1093.0  Technicien menuisier agenceur  ...                                        Hors-socle.  Condition: L’évacuation est effectuée avec le ...
110   1094.0  Technicien menuisier agenceur  ...                                        Hors-socle.  Conditions:\nMoyens matériels de protection\nC...
111   1095.0  Technicien menuisier agenceur  ...  Cycle 4 - Domaine 3 - La règle et le droit\nCy...  Conditions: Consignes de prévention de sécurit...
112   1111.0  Technicien menuisier agenceur  ...                                        Hors-socle.  Conditions: Temps alloué, planning\n\nCritère ...

[113 rows x 12 columns]

In [28]: df_wanted = pd.read_csv("CAP Menuisier Installateur-CAP MI-20200524_1619-comma_separated_EXPORT_Moodle.csv")                                                    

In [29]: df_wanted                                                                                                                                                        
Out[29]:
   ID de la compétence parente      ID  ... Est un référentiel                                 Taxonomie
0                          NaN  CAP MI  ...                1.0  concept,competency,competency,competency
1                          NaN      C1  ...                NaN                                       NaN
2                           C1    C1.1  ...                NaN                                       NaN
3                         C1.1    C111  ...                NaN                                       NaN
4                         C1.1    C112  ...                NaN                                       NaN
5                         C1.1    C113  ...                NaN                                       NaN
6                          NaN      C2  ...                NaN                                       NaN
7                           C2     C21  ...                NaN                                       NaN
8                          C21    C211  ...                NaN                                       NaN
9                          C21    C212  ...                NaN                                       NaN
10                         C21    C213  ...                NaN                                       NaN
11                          C2     C22  ...                NaN                                       NaN
12                         C22    C221  ...                NaN                                       NaN
13                         NaN      C3  ...                NaN                                       NaN
14                          C3     C31  ...                NaN                                       NaN
15                         C31    C311  ...                NaN                                       NaN
16                         C31    C312  ...                NaN                                       NaN
17                         C31    C313  ...                NaN                                       NaN
18                         C31    C314  ...                NaN                                       NaN
19                         C31    C315  ...                NaN                                       NaN
20                         C31    C316  ...                NaN                                       NaN
21                         C31    C317  ...                NaN                                       NaN
22                         C31    C318  ...                NaN                                       NaN
23                          C3     C32  ...                NaN                                       NaN
24                         C32    C321  ...                NaN                                       NaN

[25 rows x 14 columns]

In [30]: df_output = pd.DataFrame(None, df_input.index, df_wanted.columns)                                                                                                

In [31]: df_output                                                                                                                                                        
Out[31]:
    ID de la compétence parente   ID Nom abrégé Description  ... IDs des compétences croisées associées ID d'exportation (optionnel) Est un référentiel Taxonomie
0                           NaN  NaN        NaN         NaN  ...                                    NaN                          NaN                NaN       NaN
1                           NaN  NaN        NaN         NaN  ...                                    NaN                          NaN                NaN       NaN
2                           NaN  NaN        NaN         NaN  ...                                    NaN                          NaN                NaN       NaN
3                           NaN  NaN        NaN         NaN  ...                                    NaN                          NaN                NaN       NaN
4                           NaN  NaN        NaN         NaN  ...                                    NaN                          NaN                NaN       NaN
..                          ...  ...        ...         ...  ...                                    ...                          ...                ...       ...
108                         NaN  NaN        NaN         NaN  ...                                    NaN                          NaN                NaN       NaN
109                         NaN  NaN        NaN         NaN  ...                                    NaN                          NaN                NaN       NaN
110                         NaN  NaN        NaN         NaN  ...                                    NaN                          NaN                NaN       NaN
111                         NaN  NaN        NaN         NaN  ...                                    NaN                          NaN                NaN       NaN
112                         NaN  NaN        NaN         NaN  ...                                    NaN                          NaN                NaN       NaN

[113 rows x 14 columns]

In [32]: df_output['
ID'] = df_input.apply(lambda x: str(x['ITEM']).split(' ')[0], axis=1)                                                                                

In [33]: df_output['
ID de la compétence parente'] = df_output.apply(lambda x: str(x['ID'])[:-2], axis=1)                                                                  

In [34]: df_output['
Nom abrégé'] = df_input.apply(lambda x: str(x['THEME']), axis=1)                                                                                      

In [35]: df_output                                                                                                                                                        
Out[35]:
    ID de la compétence parente       ID                                         Nom abrégé  ... ID d'
exportation (optionnel) Est un référentiel Taxonomie
0                             n      nan                                                nan  ...                          NaN                NaN       NaN
1                          C1.1   C1.1.1  C1.1 Identifier et décoder des documents techn...  ...                          NaN                NaN       NaN
2                          C1.1   C1.1.2  C1.1 Identifier et décoder des documents techn...  ...                          NaN                NaN       NaN
3                          C1.1   C1.1.3  C1.1 Identifier et décoder des documents techn...  ...                          NaN                NaN       NaN
4                          C1.1   C1.1.4  C1.1 Identifier et décoder des documents techn...  ...                          NaN                NaN       NaN
..                          ...      ...                                                ...  ...                          ...                ...       ...
108                       C3.11  C3.11.1   C3.11 Gérer l’environnement de chantier (U1, U2)  ...                          NaN                NaN       NaN
109                       C3.11  C3.11.2   C3.11 Gérer l’environnement de chantier (U1, U2)  ...                          NaN                NaN       NaN
110                       C3.11  C3.11.3   C3.11 Gérer l’environnement de chantier (U1, U2)  ...                          NaN                NaN       NaN
111                       C3.11  C3.11.4   C3.11 Gérer l’environnement de chantier (U1, U2)  ...                          NaN                NaN       NaN
112                       C3.11  C3.11.5   C3.11 Gérer l’environnement de chantier (U1, U2)  ...                          NaN                NaN       NaN

[113 rows x 14 columns]

In [36]: df_output['ID'] = df_input.apply(lambda x: str(x['ITEM']).split(' ')[0].replace('.',''), axis=1)                                                                

In [37]: df_output                                                                                                                                                        
Out[37]:
    ID de la compétence parente     ID                                         Nom abrégé  ... ID d'exportation (optionnel) Est un référentiel Taxonomie
0                             n    nan                                                nan  ...                          NaN                NaN       NaN
1                          C1.1   C111  C1.1 Identifier et décoder des documents techn...  ...                          NaN                NaN       NaN
2                          C1.1   C112  C1.1 Identifier et décoder des documents techn...  ...                          NaN                NaN       NaN
3                          C1.1   C113  C1.1 Identifier et décoder des documents techn...  ...                          NaN                NaN       NaN
4                          C1.1   C114  C1.1 Identifier et décoder des documents techn...  ...                          NaN                NaN       NaN
..                          ...    ...                                                ...  ...                          ...                ...       ...
108                       C3.11  C3111   C3.11 Gérer l’environnement de chantier (U1, U2)  ...                          NaN                NaN       NaN
109                       C3.11  C3112   C3.11 Gérer l’environnement de chantier (U1, U2)  ...                          NaN                NaN       NaN
110                       C3.11  C3113   C3.11 Gérer l’environnement de chantier (U1, U2)  ...                          NaN                NaN       NaN
111                       C3.11  C3114   C3.11 Gérer l’environnement de chantier (U1, U2)  ...                          NaN                NaN       NaN
112                       C3.11  C3115   C3.11 Gérer l’environnement de chantier (U1, U2)  ...                          NaN                NaN       NaN

[113 rows x 14 columns]



Voilà, c'est pas forcément très long à faire, mais il faut bien être sûr de quoi correspond à quoi...
Là j'ai utilisé des "split" mais on peut faire avec des regex si besoin est

edit :
j'ai remis ça sous forme de script ici:
Faut installer pandas, puis (je prends le 2e fichier pour les entêtes seulement)

./convert_csv_educ_nat -i 'export_listing-items_MEN(1).csv' -o testout.csv -w 'CAP Menuisier Installateur-CAP MI-20200524_1619-comma_separated_EXPORT_Moodle.csv'

Si j'ai fait la convertion dans le bon sens ^^

edit2:
version avec bibliothèque standard : done

Ya plus qu'a faire correspondre les champs de la bonne façon:wq

Dernière modification par David5647 (27-05-2020 11:50:11)

Hors ligne

#10 01-06-2020 10:29:00

cemoi
Membre
Distrib. : Debian 10 Buster et une SID
Noyau : Linux 4.19.0-9-amd64
(G)UI : XFCE
Inscription : 21-10-2008

Re : Reformater un .csv pour pouvoir l'importer dans moodle

Bonjour,
wow super!! Merci!! je vais tester tout ça et je tenterai d'expliquer les correspondances le plus clairement possible.

par contre je viens de voir qu'il n'y a pas de licence sur ton code du coup est ce que ce code pourra être reprit par le projet Moodle et/ou SacCoche?
++

Dernière modification par cemoi (01-06-2020 10:31:04)


Linux debDesk Linux 4.19.0-9-amd64

Hors ligne

#11 01-06-2020 11:07:54

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : Reformater un .csv pour pouvoir l'importer dans moodle

cemoi a écrit :

e viens de voir qu'il n'y a pas de licence sur ton code


C'est fait!

(note : le code pourrait être moins long, mais je me suis amusé à faire en sorte que l'on puisse facilement ajouter des conversions par le biais d'un dictionnaire : {colonne à transformer, colonne où écrire,  transformation à effectuer}, c'est moins souple, mais plus facile d'emploi... dit moi si t'y comprend quelque chose =P )

Dernière modification par David5647 (01-06-2020 11:38:55)

Hors ligne

#12 10-06-2020 12:55:23

cemoi
Membre
Distrib. : Debian 10 Buster et une SID
Noyau : Linux 4.19.0-9-amd64
(G)UI : XFCE
Inscription : 21-10-2008

Re : Reformater un .csv pour pouvoir l'importer dans moodle

Hello,
sorry pour la ré-activité... mais je vais bientôt sortir la tête de l'eau smile

Il y a un petit probléme mais c'est de ma faute.. :

tous les fichiers qui commences par export_listing-items**.csv ce sont les exports à partir de SAcoChe

Dans ton readme sur GIT tu as mis:
Convertisseur csv : Moodle => SaCoche
mais c'est bien l'inverse smile
Par contre dans l'url du GIT c'est bien dans le bon odre  >> https://framagit.org/Daguhh/convertsacocochemoodle

Par contre c'est bien une conversion des exports de SacoChe (qui sont en .csv) vers Moodle (qui ne prend que du .csv à priori... c'est peut être une limitation du serveur académique)

J'ai vu qu'il y avait une possibilité de conversions par le biais d'un dictionnaire mais je n'ai pas testé. J'ai juste lancé le script et regardé ce que ça sortais et c'est plus tot pas mal
J'ai utilisé que ./convert_csv_educ_nat -i  pour l'utilisation avec la bib standard

J'ai vu que tu avais super documenté le code: un grand merci!! Ca va m'aider à comprendre et à ce que le code soit éventuellement repris.


Pour les correspondances:

Fichier d'export de SacoChe (en .csv)
Description des correspondance des colonnes du fichier exporter de sacoche avec celui de moodle (de gauche à droite et de haut en bas)

La colonne ITEM_ID correspond à rien >> à supprimer
La colonne MATIERE correspond à
La colonne NIVEAU correspond à la deuxieme valeure de la colonne Nom abrégé
La colonne DOMAINE correspond à la troisième valeure de la colonne Nom abrégé
La colonne THEME correspond à la quatrièle valeure de la colonne Nom abrégé <<<< à préciser car on passe d'une structure arborescente à une structure plate
La colonne REFERENCE est redondante je la suprimerai
La colonne ITEM correspond à la 5 iéme valeure de la colonne Nom abrégé <<<< à préciser car on passe d'une structure arborescente à une structure plate
La colonne DEMANDE_EVAL est à supprimer
La colonne LIEN est à supprimer
La colonne SOCLE_2016 est à supprimer
La colonne COMMENTAIRE correspond à la colonne Description

Pour le référentiel des BAC j'ai des colonnes apres sans titre avec qq trucs bidons par si par là... o_O >> à supprimer ça sert à rien



Si tu es ok on peux se faire une session en vocal pour terminer les réglages de correspondances: dis moi quand t'es dispo et ça m'ira wink
J'utilise Jitsi ou jami

++ en te remerciant vivement smile

Le fichier d'export à partir de SacoChe du référentiel de CAP est là https://cloud-montpellier.beta.educatio … bfzYfDTJLY

Le fichier d'export à partir de SacoChe du référentiel de BAC est là https://cloud-montpellier.beta.educatio … 3wZx7wEToD


Le fichier de BAC passé par le script donne ça: https://cloud-montpellier.beta.educatio … 86ZTwridir

Remarques sur ce fichier:

La colonne ID de la compétence parente est vide
Dans la colonne ID juste en dessous de ID il n'y a pas le niveau (BACTMA)
Dans la colonne ID il n'y a pas les C1 C2 C3 ni les les C1.1 C2.1 C3.1 avant les C1.1.1 C2.1.1 C3.1.1
Dans lla colonne Nom abrégé juste en dessous il n'y a pas BAC TMA
Dans la colonne description il  y a bien les balises mais pas les commentaires dedans tu me diras que pour le référentiel des bac je n'ai aps mis de descriptions: c'est vide mais dans celui des cap ça ne met pas les commentaires entre les balises
A partir de la colonne format de description rien ne va plus: ça ne correspond plus smile


Je vais surveiller le post de prêt

Dernière modification par cemoi (10-06-2020 13:24:18)


Linux debDesk Linux 4.19.0-9-amd64

Hors ligne

#13 10-06-2020 17:28:55

David5647
Membre
Distrib. : Debian Bullseye/Sid
Noyau : 5.7.0-2-amd64
(G)UI : KDE/i3wm
Inscription : 27-08-2017

Re : Reformater un .csv pour pouvoir l'importer dans moodle

cemoi a écrit :

mais c'est bien l'inverse smile


C'est pas bien grave, le principe est le même! Je changerai tout de même le README

(Au passage, la majuscule en milieu de SaCoche me fait planter le cerveau, je double à chaque fois la syllabe "co", d'où le titre qui est resté ^^)

cemoi a écrit :

J'ai vu qu'il y avait une possibilité de conversions par le biais d'un dictionnaire mais je n'ai pas testé


l'utilisation du dictionnaire n'est pas une possibilité, il faut le remplir! Comme actuellement, de définitions de conversions.
Mon code ne fait pas grand chose, si l'on veut, mon poste #9, où je montre le retour de 5 commandes, n'en fait pas moins que le code actuel. Le résultat est identique en tout cas.

L'idée du code finalement c'est :
1. ne pas utiliser d'autre bibliothèque que l'installation de base de python
2. créer un peu d'abstraction, (ce qui n'est pas une nécessite)

Ce n'est qu'un enrobage pour l’exécution de quelque chose comme:

case_de_sortie(ligne, colonne) = une_fonction(case_entrée_1(ligne,colonne), case_entrée_2(...

 

Les lignes sont parcourues une à une, les noms de colonnes sont définis puis lus dans le dictionnaire, et la fonction "une_fonction" reste à définir. Cette dernière contiendra le plus probablement des expressions régulières et fera "je prend un bout de la case 1 et un bout de la 2... et je fais un nouveau texte avec". Bref tout est dans le dictionnaire, rien dans le code.

cemoi a écrit :

La colonne NIVEAU correspond à la deuxième valeur de la colonne Nom abrégé


Tu m'as écris ça à l'envers =P

je fais:
sortie = fonction(entrée)
et pas:
entrée = fonction(sortie) (ça casserai mon idée de monde déterministe)

cemoi a écrit :

<<<< à préciser car on passe d'une structure arborescente à une structure plate


ça j'ai toujours pas bien compris...

cemoi a écrit :

Si tu es ok on peux se faire une session en vocal pour terminer les réglages de correspondances: dis moi quand t'es dispo et ça m'ira


Ok. Jitsi. Je vois pour un créneau!

cemoi a écrit :

Remarques sur ce fichier:


On peut rajouter aisément une gestion d'erreurs (si case vide, si n'importe quoi...)
J'ai rajouté aussi la possibilité de définir facilement le "format" du csv, séparateur=virgule...

Hors ligne

Pied de page des forums