conv.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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. 'hanzi',
  49. 'pinyin',
  50. 'translation',
  51. 'sequence',
  52. 'lesson',
  53. 'origin'],
  54. cast: [
  55. 'String',
  56. 'String',
  57. 'String',
  58. 'String',
  59. 'String',
  60. 'String']
  61. }).parse();
  62. // le json de sortie
  63. var sortie = {}; // numéro, hanzi, traditionel, pinyin, traduction, exempleHanzi, exempleTraditionel, exemplePinyin, exempleTraduction, leçon, origine
  64. // la ligne CSV qu'on va écrire dans le fichier CSV
  65. var ligneCSV = "";
  66. // L'élément xml qui constitue un enregistrement du fichier xml
  67. var ele = null;
  68. var l =0;
  69. function titleCase(string) { return string.charAt(0).toUpperCase() + string.slice(1); }
  70. monjson.forEach(function(enregistrement){
  71. // DEBUG
  72. // console.log(enregistrement.hanzi);
  73. l = l + 1;
  74. console.log(l);
  75. ligneCSV = "";
  76. ele = null;
  77. sortie = {};
  78. try {
  79. sortie.hanzi = enregistrement.hanzi.trim();
  80. sortie.traditional = opencc.simplifiedToTraditional(enregistrement.hanzi).trim();
  81. sortie.pinyin = titleCase(enregistrement.pinyin.trim());
  82. sortie.translation = titleCase(enregistrement.translation.trim());
  83. sortie.sequence = enregistrement.sequence;
  84. sortie.lesson = enregistrement.lesson;
  85. sortie.origin = enregistrement.origin;
  86. ligneCSV =
  87. sortie.hanzi + tab +
  88. sortie.traditional + tab +
  89. sortie.pinyin + tab +
  90. sortie.translation + tab +
  91. sortie.sequence + tab +
  92. sortie.lesson + tab +
  93. sortie.origin +
  94. endLine;
  95. // DEBUG
  96. console.log(ligneCSV);
  97. // Ecriture de la ligne CSV
  98. moncsv.write(ligneCSV);
  99. // Ecriture de la ligne json
  100. json.write(stringify(sortie, null, 2, {offset: 4}) + ',\n');
  101. // écriture d ela ligne xml
  102. var ele = feed.ele({sortie});
  103. } catch (err) {
  104. console.log(err);
  105. }
  106. })
  107. // DEBUG
  108. // console.log(monjson);
  109. // Fermeture des fichiers json, xml et csv
  110. // on ferme le fichier CSV
  111. moncsv.end();
  112. // on écrit le fichier xml
  113. fs.writeFileSync(fichierXml, feed.end({
  114. pretty: true
  115. }));
  116. // on écrit le fichier Json
  117. // fs.writeFileSync(fichierJson, JSON.stringify(maineeduObj), "UTF-8");
  118. json.write('{}]}');
  119. json.end();