// librairie de gestion des répertoires et fichiers const fs = require("fs"); const path = require("path"); // librairie de gestion des arguments de la ligne de commande var argv = require("optimist").argv; // librairie de lecture de lignes de texte var readline = require("readline"); // librairie de traitement du pinyin const pinyinizer = require("pinyinizer"); // librairie de gestion du hanzi const opencc = require("node-opencc"); // librairie de gestion des fichiers csv var csv = require("comma-separated-values"); // librairie de lecture ligne par ligne d'un fichier const lineReader = require("line-reader"); // Nom du fichier entrée csv // en entrée, on donne le nom du fichier à traiter sans le répertoire var repertoireInitial = "./"; var argument = argv._[0]; fichierDonnées = path.join(repertoireInitial, argument); // DEBUG // console.log(fichierDonnées); // Nom du fichier xml console.log("nom du fichier: ", fichierDonnées) fichierXml = fichierDonnées.replace(".csv", ".xml"); // DEBUG // console.log("nom du fichier: ", fichierXml) var tab = "\t"; var rc = "\n"; // There are 4 types of drills with a different number of fields // depending of the absence or presence of a cue, and the type of the cue. var longueur = 0; // enregistrement des drills à 10 champs var ligne1 = { numero: "", pinyin: "", hanzi: "", translation: "", pinyin1: "", hanzi1: "", translation1: "", themodule: "", unit: "", book: "", }; function resetLigne1() { numero = ""; pinyin = ""; hanzi = ""; translation = ""; pinyin1 = ""; hanzi1 = ""; translation1 = ""; themodule = ""; unit = ""; book = ""; } // enregistrement des drills à 11 champs var ligne2 = { numero: "", pinyin: "", hanzi: "", translation: "", cue: "", pinyin1: "", hanzi1: "", translation1: "", themodule: "", unit: "", book: "", }; function resetLigne2() { numero = ""; pinyin = ""; hanzi = ""; translation = ""; cue = ""; pinyin1 = ""; hanzi1 = ""; translation1 = ""; themodule = ""; unit = ""; book = ""; } // enregistrement des drills à 13 champs var ligne3 = { numero: "", pinyin: "", hanzi: "", translation: "", cue_pinyin: "", cue_hanzi: "", cue_translation: "", pinyin1: "", hanzi1: "", translation1: "", themodule: "", unit: "", book: "", }; function resetLigne3() { numero = ""; pinyin = ""; hanzi = ""; translation = ""; cue_pinyin: ""; cue_hanzi: ""; cue_translation: ""; pinyin1 = ""; hanzi1 = ""; translation1 = ""; themodule = ""; unit = ""; book = ""; } // la ligne CSV qu'on lit var ligneCSV = ""; prelude = ` Give affirmative response to all questions. `; fin = `
`; // on ouvre le fichier, on teste la première ligne, on affiche les résultats, et on ferme le fichier: // il y 10, 11 ou 12 champs suivant l'exercice // on ouvre et lit le fichier csv à traiter var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8"); // DEBUG console.log("nom du fichier à traiter: ", fichierDonnées, '\n'); var res = fichierATraiter.split("\n"); var res1 = res[0].split("\t"); longueur = res1.length; console.log("type d'exercice: ", longueur, " champs"); // on crée et ouvre le fichier de sortie xml var monxml = fs.createWriteStream(fichierXml); console.log("fichier créé") if (longueur == 10) { console.log('modèle à 10 champs') var moncsv = new csv(fichierATraiter, { header: [ "numero", "pinyin", "hanzi", "translation", "pinyin1", "hanzi1", "translation1", "themodule", "unit", "book", ], cast: [ "String", "String", "String", "String", "String", "String", "String", "String", "String", "String", ], }).parse(); console.log("fichier parsé") // écriture du prélude monxml.write(prelude); monxml.write(rc); console.log("prelude écrit") // // transformation et écriture des lignes dans le fichier xml moncsv.forEach(function (enregistrement) { // écriture de la question monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(enregistrement.numero); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write( '' ); monxml.write(enregistrement.pinyin); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write( '' ); monxml.write(enregistrement.hanzi); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write( '' ); monxml.write(enregistrement.translation); monxml.write(""); monxml.write(rc); monxml.write(""); // écriture de l'espace entre question et réponse monxml.write(rc); monxml.write(""); monxml.write(rc); // écriture de la réponse monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(''); monxml.write(enregistrement.pinyin1); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(''); monxml.write(enregistrement.hanzi1); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(enregistrement.translation1); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); // remise à zéro de l'enregistrement resetLigne1(); }); } else if (longueur == 11) { console.log('modèle à 11 champs') var moncsv = new csv(fichierATraiter, { header: [ "numero", "pinyin", "hanzi", "translation", "cue", "pinyin1", "hanzi1", "translation1", "themodule", "unit", "book", ], cast: [ "String", "String", "String", "String", "String", "String", "String", "String", "String", "String", "String", ], }).parse(); // écriture du prélude monxml.write(prelude); monxml.write(rc); // // transformation et écriture des lignes dans le fichier xml moncsv.forEach(function (enregistrement) { // écriture de la question monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(enregistrement.numero); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write( '' ); monxml.write(enregistrement.pinyin); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write( '' ); monxml.write(enregistrement.hanzi); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write( '' ); monxml.write(enregistrement.translation); monxml.write(""); monxml.write(rc); monxml.write(""); // écriture de l'espace entre question et la cue monxml.write(rc); monxml.write(""); monxml.write(rc); // écriture de la cue monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write('Cue'); monxml.write(enregistrement.cue); monxml.write(""); monxml.write(rc); monxml.write(""); // écriture de l'espace entre la cue et la réponse monxml.write(rc); monxml.write(""); monxml.write(rc); // écriture de la réponse monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(''); monxml.write(enregistrement.pinyin1); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(''); monxml.write(enregistrement.hanzi1); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(enregistrement.translation1); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); // remise à zéro de l'enregistrement resetLigne2(); }); } else if (longueur == 12) { console.log('modèle à 12 champs') } else if (longueur == 13) { console.log('modèle à 13 champs') var moncsv = new csv(fichierATraiter, { header: [ "numero", "pinyin", "hanzi", "translation", "cue_pinyin", "cue_hanzi", "cue_translation", "pinyin1", "hanzi1", "translation1", "themodule", "unit", "book", ], cast: [ "String", "String", "String", "String", "String", "String", "String", "String", "String", "String", "String", "String", "String", ], }).parse(); // écriture du prélude monxml.write(prelude); monxml.write(rc); // // transformation et écriture des lignes dans le fichier xml moncsv.forEach(function (enregistrement) { // écriture de la question monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(enregistrement.numero); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write( '' ); monxml.write(enregistrement.pinyin); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write( '' ); monxml.write(enregistrement.hanzi); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write( '' ); monxml.write(enregistrement.translation); monxml.write(""); monxml.write(rc); monxml.write(""); // écriture de l'espace entre question et la cue monxml.write(rc); monxml.write(""); monxml.write(rc); // écriture de la cue monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write('Cue'); monxml.write('' + enregistrement.cue_pinyin + ''); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(''); monxml.write('' + enregistrement.cue_hanzi + ''); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(''); monxml.write(enregistrement.cue_translation); monxml.write(""); monxml.write(rc); monxml.write(""); // écriture de l'espace entre la cue et la réponse monxml.write(rc); monxml.write(""); monxml.write(rc); // écriture de la réponse monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(''); monxml.write(enregistrement.pinyin1); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(''); monxml.write(enregistrement.hanzi1); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(rc); monxml.write(tab); monxml.write(""); monxml.write(enregistrement.translation1); monxml.write(""); monxml.write(rc); monxml.write(""); monxml.write(rc); monxml.write(""); // remise à zéro de l'enregistrement resetLigne2(); }); } else { console.log("Erreur du nombre de champs dans le fichier: ", fichierDonnées); } // écriture de la fin dans le fichier xml monxml.write(fin); // // fermeture du fichier de sortie xml monxml.end(); // //