grwiki.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // librairie de gestion des répertoires et fichiers
  2. const fs = require("fs");
  3. const path = require("path");
  4. // librairie de gestion des arguments de la ligne de commande
  5. var argv = require("optimist").argv;
  6. // librairie de traitement du pinyin
  7. const pinyinizer = require("pinyinizer");
  8. // librairie de gestion du hanzi
  9. const opencc = require("node-opencc");
  10. // librairie de gestion des fichiers xml
  11. const builder = require("xmlbuilder");
  12. // librairie de gestion des fichiers csv
  13. var csv = require("comma-separated-values");
  14. // données de stockage
  15. var fichierXml = "grammarwiki-table.xml";
  16. var fichierJson = "grammarwiki-table.json";
  17. var fichierCSV = "grammarwiki-table.csv";
  18. // en entrée, on donne le nom du fichier à traiter sans le répertoire
  19. var repertoireInitial = "./";
  20. var argument = argv._[0];
  21. fichierDonnées = path.join(repertoireInitial, argument);
  22. // DEBUG
  23. // console.log(fichierDonnées);
  24. // utilitaires
  25. var tab = "\t";
  26. var endLine = "\n";
  27. // Variables fichier des fichiers csv, json et xml
  28. fichierXml = path.join(repertoireInitial, argument + ".xml");
  29. fichierJson = path.join(repertoireInitial, argument + ".json");
  30. fichierCSV = path.join(repertoireInitial, argument + "-1.csv");
  31. // on crée le fichier xml
  32. var feed = builder.create("grammarwikitable", {
  33. version: "1.0",
  34. encoding: "UTF-8",
  35. standalone: true
  36. });
  37. // on crée le fichier csv
  38. var moncsv = fs.createWriteStream(fichierCSV);
  39. // on crée le fichier json
  40. var json = fs.createWriteStream(fichierJson);
  41. json.write('{"grammarwiki":[');
  42. var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8");
  43. // DEBUG
  44. // console.log(fichierATraiter);
  45. var monjson = new csv(fichierATraiter, {
  46. header: ["hanzi", "pinyin", "translation", "sequence", "lesson", "origin"],
  47. cast: ["String", "String", "String", "String", "String", "String"]
  48. }).parse();
  49. // la ligne CSV qu'on va écrire dans le fichier CSV
  50. var ligneCSV = "";
  51. // L'élément xml qui constitue un enregistrement du fichier xml
  52. var ele = null;
  53. monjson.forEach(function(enregistrement) {
  54. // DEBUG
  55. // console.log(enregistrement.hanzi);
  56. ligneCSV = "";
  57. ele = null;
  58. try {
  59. enregistrement.hanzi = enregistrement.hanzi.trim();
  60. var NomFichierSon = enregistrement.hanzi.replace(/ /g, "");
  61. enregistrement.traditional = opencc.simplifiedToTraditional(
  62. enregistrement.hanzi
  63. );
  64. // DEBUG
  65. //console.log(enregistrement.hanzi, "**", enregistrement.traditional);
  66. // console.log(enregistrement.translation);
  67. //enregistrement.translation = enregistrement.translation.replace(/;/g, " /");
  68. //enregistrement.translation = enregistrement.translation.replace(/, /g, " / ");
  69. if (enregistrement.classifier == "") {
  70. enregistrement.classifier = "";
  71. }
  72. // console.log(enregistrement.translation);
  73. enregistrement.sound = "[sound:" + NomFichierSon + ".mp3]";
  74. ligneCSV =
  75. enregistrement.hanzi +
  76. tab +
  77. enregistrement.traditional +
  78. tab +
  79. enregistrement.pinyin +
  80. tab +
  81. enregistrement.translation +
  82. tab +
  83. enregistrement.sequence +
  84. tab +
  85. enregistrement.lesson +
  86. tab +
  87. enregistrement.sound +
  88. tab +
  89. enregistrement.origin +
  90. endLine;
  91. // DEBUG console.log(ligneCSV);
  92. // Ecriture de la ligne CSV
  93. moncsv.write(ligneCSV);
  94. // Ecriture de la ligne json
  95. json.write(JSON.stringify(enregistrement) + ",");
  96. var ele = feed.ele({ enregistrement });
  97. } catch (err) {
  98. console.log(err);
  99. }
  100. });
  101. // DEBUG
  102. // console.log(monjson);
  103. // Fermeture des fichiers json, xml et csv
  104. // on ferme le fichier CSV
  105. moncsv.end();
  106. // on écrit le fichier xml
  107. fs.writeFileSync(
  108. fichierXml,
  109. feed.end({
  110. pretty: true
  111. })
  112. );
  113. // on écrit le fichier Json
  114. // fs.writeFileSync(fichierJson, JSON.stringify(maineeduObj), "UTF-8");
  115. json.write("{},]}");
  116. json.end();