123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634 |
- // 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 = `
- <table frame="none" colsep="0" rowsep="0">
- <title>Give affirmative response to all questions.</title>
- <tgroup cols="2">
- <colspec colname="c1" colnum="1" colwidth="1.0*"/>
- <colspec colname="c2" colnum="2" colwidth="15.0*"/>
- <tbody>
- `;
- fin = `
- </tbody>
- </tgroup>
- </table>
- `;
- // 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("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry>");
- monxml.write(enregistrement.numero);
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write(
- '<entry><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?><foreignphrase xml:lang="cmn-Latn-pinyin">'
- );
- monxml.write(enregistrement.pinyin);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write(
- '<entry><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?><foreignphrase xml:lang="cmn-Hani">'
- );
- monxml.write(enregistrement.hanzi);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write(
- '<entry><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?>'
- );
- monxml.write(enregistrement.translation);
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write("</row>");
- // écriture de l'espace entre question et réponse
- monxml.write(rc);
- monxml.write("<row><entry/><entry/></row>");
- monxml.write(rc);
- // écriture de la réponse
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry>");
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write('<entry><foreignphrase xml:lang="cmn-Latn-pinyin">');
- monxml.write(enregistrement.pinyin1);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write('<entry><foreignphrase xml:lang="cmn-Hani">');
- monxml.write(enregistrement.hanzi1);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry>");
- monxml.write(enregistrement.translation1);
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row><entry/><entry/></row>");
- // 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("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry>");
- monxml.write(enregistrement.numero);
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write(
- '<entry><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?><foreignphrase xml:lang="cmn-Latn-pinyin">'
- );
- monxml.write(enregistrement.pinyin);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write(
- '<entry><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?><foreignphrase xml:lang="cmn-Hani">'
- );
- monxml.write(enregistrement.hanzi);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write(
- '<entry><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?>'
- );
- monxml.write(enregistrement.translation);
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write("</row>");
- // écriture de l'espace entre question et la cue
- monxml.write(rc);
- monxml.write("<row><entry/><entry/></row>");
- monxml.write(rc);
- // écriture de la cue
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write('<entry>Cue</entry><entry align="center"><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?>');
- monxml.write(enregistrement.cue);
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write("</row>");
- // écriture de l'espace entre la cue et la réponse
- monxml.write(rc);
- monxml.write("<row><entry/><entry/></row>");
- monxml.write(rc);
- // écriture de la réponse
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry>");
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write('<entry><foreignphrase xml:lang="cmn-Latn-pinyin">');
- monxml.write(enregistrement.pinyin1);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write('<entry><foreignphrase xml:lang="cmn-Hani">');
- monxml.write(enregistrement.hanzi1);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry>");
- monxml.write(enregistrement.translation1);
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row><entry/><entry/></row>");
- // 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("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry>");
- monxml.write(enregistrement.numero);
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write(
- '<entry><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?><foreignphrase xml:lang="cmn-Latn-pinyin">'
- );
- monxml.write(enregistrement.pinyin);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write(
- '<entry><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?><foreignphrase xml:lang="cmn-Hani">'
- );
- monxml.write(enregistrement.hanzi);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write(
- '<entry><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?>'
- );
- monxml.write(enregistrement.translation);
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write("</row>");
- // écriture de l'espace entre question et la cue
- monxml.write(rc);
- monxml.write("<row><entry/><entry/></row>");
- monxml.write(rc);
- // écriture de la cue
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write('<entry>Cue</entry><entry align="center"><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?>');
- monxml.write('<foreignphrase xml:lang="cmn-Latn-pinyin">' + enregistrement.cue_pinyin + '</foreignphrase>');
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write('<entry></entry><entry align="center"><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?>');
- monxml.write('<foreignphrase xml:lang="cmn-Hani">' + enregistrement.cue_hanzi + '</foreignphrase>');
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write("</row>");
-
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write('<entry></entry><entry align="center"><?dbhtml bgcolor="#f4f5f6" ?><?dbfo bgcolor="#f4f5f6"?>');
- monxml.write(enregistrement.cue_translation);
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write("</row>");
-
-
- // écriture de l'espace entre la cue et la réponse
- monxml.write(rc);
- monxml.write("<row><entry/><entry/></row>");
- monxml.write(rc);
- // écriture de la réponse
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry>");
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write('<entry><foreignphrase xml:lang="cmn-Latn-pinyin">');
- monxml.write(enregistrement.pinyin1);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write('<entry><foreignphrase xml:lang="cmn-Hani">');
- monxml.write(enregistrement.hanzi1);
- monxml.write("</foreignphrase></entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry/>");
- monxml.write(rc);
- monxml.write(tab);
- monxml.write("<entry>");
- monxml.write(enregistrement.translation1);
- monxml.write("</entry>");
- monxml.write(rc);
- monxml.write("</row>");
- monxml.write(rc);
- monxml.write("<row><entry/><entry/></row>");
- // 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();
- //
- //
|