vocab.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. var stringify = require('json-stringify');
  7. // librairie de traitement du pinyin
  8. const pinyinizer = require('pinyinizer');
  9. // librairie de gestion du hanzi
  10. const opencc = require('node-opencc');
  11. // librairie de gestion des fichiers xml
  12. const builder = require('xmlbuilder');
  13. // librairie de gestion des fichiers csv
  14. var csv = require("comma-separated-values");
  15. // données de stockage
  16. var fichierXml = "chinwa-table.xml";
  17. var fichierJson = "chinwa-table.json";
  18. var fichierCSV = "chinwa-table.csv";
  19. // en entrée, on donne le nom du fichier à traiter sans le répertoire
  20. var repertoireInitial = "../Listes-mots-formatés/";
  21. var argument = argv._[0];
  22. fichierDonnées = path.join(repertoireInitial,argument);
  23. // DEBUG
  24. // console.log(fichierDonnées);
  25. // utilitaires
  26. var tab = "\t";
  27. var endLine = "\n";
  28. // Variables fichier des fichiers csv, json et xml
  29. fichierXml = path.join(repertoireInitial, argument + ".xml");
  30. fichierJson = path.join(repertoireInitial, argument + ".json");
  31. fichierCSV = path.join(repertoireInitial, argument + "-1.csv");
  32. // on crée le fichier xml
  33. var feed = builder.create('mandarin888table', {
  34. version: '1.0',
  35. encoding: 'UTF-8',
  36. standalone: true
  37. });
  38. // on crée le fichier csv
  39. var moncsv = fs.createWriteStream(fichierCSV);
  40. // on crée le fichier json
  41. var json = fs.createWriteStream(fichierJson);
  42. json.write('{"mandarin888":[');
  43. var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8");
  44. // DEBUG
  45. // console.log(fichierATraiter);
  46. var monjson = new csv(fichierATraiter, {
  47. header: [
  48. 'numero',
  49. 'hanzi',
  50. 'pinyin',
  51. 'translation',
  52. 'exampleHanzi',
  53. 'examplePinyin',
  54. 'exampleTranslation',
  55. 'lesson',
  56. 'origin'],
  57. cast: [
  58. 'String',
  59. 'String',
  60. 'String',
  61. 'String',
  62. 'String',
  63. 'String',
  64. 'String',
  65. 'String',
  66. 'String']
  67. }).parse();
  68. // le json de sortie
  69. var sortie = {}; // numéro, hanzi, traditionel, pinyin, traduction, exempleHanzi, exempleTraditionel, exemplePinyin, exempleTraduction, leçon, origine
  70. // la ligne CSV qu'on va écrire dans le fichier CSV
  71. var ligneCSV = "";
  72. // L'élément xml qui constitue un enregistrement du fichier xml
  73. var ele = null;
  74. function titleCase(string) { return string.charAt(0).toUpperCase() + string.slice(1); }
  75. monjson.forEach(function(enregistrement){
  76. // DEBUG
  77. // console.log(enregistrement.hanzi);
  78. ligneCSV = "";
  79. ele = null;
  80. sortie = {};
  81. try {
  82. sortie.numero = enregistrement.numero;
  83. sortie.hanzi = enregistrement.hanzi.trim();
  84. sortie.traditional = opencc.simplifiedToTraditional(enregistrement.hanzi).trim();
  85. sortie.pinyin = enregistrement.pinyin.trim();
  86. sortie.translation = enregistrement.translation.trim();
  87. sortie.exampleHanzi = enregistrement.exampleHanzi.trim();
  88. sortie.exampleTraditional = opencc.simplifiedToTraditional(enregistrement.exampleHanzi).trim();
  89. sortie.examplePinyin = titleCase(enregistrement.examplePinyin.trim());
  90. sortie.exampleTranslation = titleCase(enregistrement.exampleTranslation.trim());
  91. sortie.lesson = enregistrement.lesson;
  92. sortie.origin = enregistrement.origin;
  93. ligneCSV =
  94. sortie.numero + tab +
  95. sortie.hanzi + tab +
  96. sortie.traditional + tab +
  97. sortie.pinyin + tab +
  98. sortie.translation + tab +
  99. sortie.exampleHanzi + tab +
  100. sortie.exampleTraditional + tab +
  101. sortie.examplePinyin + tab +
  102. sortie.exampleTranslation + tab +
  103. sortie.lesson + tab +
  104. sortie.origin +
  105. endLine;
  106. // DEBUG
  107. //console.log(ligneCSV);
  108. // Ecriture de la ligne CSV
  109. moncsv.write(ligneCSV);
  110. // Ecriture de la ligne json
  111. json.write(stringify(sortie, null, 2, {offset: 4}) + ',\n');
  112. // écriture d ela ligne xml
  113. var ele = feed.ele({sortie});
  114. } catch (err) {
  115. console.log(err);
  116. }
  117. })
  118. // DEBUG
  119. // console.log(monjson);
  120. // Fermeture des fichiers json, xml et csv
  121. // on ferme le fichier CSV
  122. moncsv.end();
  123. // on écrit le fichier xml
  124. fs.writeFileSync(fichierXml, feed.end({
  125. pretty: true
  126. }));
  127. // on écrit le fichier Json
  128. // fs.writeFileSync(fichierJson, JSON.stringify(maineeduObj), "UTF-8");
  129. json.write('{}]}');
  130. json.end();