chinwa1-1.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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 = "chinwa-table.xml";
  16. var fichierJson = "chinwa-table.json";
  17. var fichierCSV = "chinwa-table.csv";
  18. // en entrée, on donne le nom du fichier à traiter sans le répertoire
  19. var repertoireInitial = "/home/eric/Devs/Nodejs/Listes/Chinwa";
  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('chinwatable', {
  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('{"chinwa1":[');
  42. var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8");
  43. // DEBUG
  44. // console.log(fichierATraiter);
  45. var monjson = new csv(fichierATraiter, {
  46. header: [
  47. 'hanzi',
  48. 'traditional',
  49. 'pinyin',
  50. 'translation',
  51. 'anglais',
  52. 'classifier',
  53. 'lesson',
  54. 'sound',
  55. //'sound1',
  56. 'origin'],
  57. cast: [
  58. 'String',
  59. 'String',
  60. 'String',
  61. 'String',
  62. 'String',
  63. 'String',
  64. 'String',
  65. 'String',
  66. //'String',
  67. 'String']
  68. }).parse();
  69. // la ligne CSV qu'on va écrire dans le fichier CSV
  70. var ligneCSV = "";
  71. // L'élément xml qui constitue un enregistrement du fichier xml
  72. var ele = null;
  73. var l = 0;
  74. monjson.forEach(function(enregistrement){
  75. // DEBUG
  76. // console.log(enregistrement.hanzi);
  77. ligneCSV = "";
  78. ele = null;
  79. l = l + 1;
  80. console.log("ligne: " , l);
  81. try {
  82. enregistrement.traditional = opencc.simplifiedToTraditional(enregistrement.hanzi).trim();
  83. // DEBUG
  84. //console.log(enregistrement.hanzi, "**", enregistrement.traditional);
  85. // console.log(enregistrement.translation);
  86. enregistrement.translation = enregistrement.translation.replace(/;/g, " /");
  87. enregistrement.translation = enregistrement.translation.replace(/, /g, " / ");
  88. enregistrement.anglais = enregistrement.anglais.replace(/;/g, " /");
  89. enregistrement.anglais = enregistrement.anglais.replace(/, /g, " / ");
  90. if (enregistrement.classifier == "") {
  91. enregistrement.classifier = "";
  92. }
  93. enregistrement.hanzi = enregistrement.hanzi.trim();
  94. enregistrement.pinyin = enregistrement.pinyin.trim();
  95. enregistrement.translation = enregistrement.translation.trim();
  96. if (enregistrement.hanzi.length == 1) {
  97. enregistrement.charcode = enregistrement.hanzi.charCodeAt(0);
  98. } else {
  99. enregistrement.charcode= 0;
  100. }
  101. ligneCSV = enregistrement.hanzi + tab +
  102. enregistrement.traditional + tab +
  103. enregistrement.pinyin + tab +
  104. enregistrement.translation + tab +
  105. enregistrement.anglais + tab +
  106. enregistrement.classifier + tab +
  107. enregistrement.lesson + tab +
  108. enregistrement.sound + tab +
  109. enregistrement.origin + tab +
  110. enregistrement.charcode +
  111. endLine;
  112. // DEBUG console.log(ligneCSV);
  113. // Ecriture de la ligne CSV
  114. moncsv.write(ligneCSV);
  115. // Ecriture de la ligne json
  116. json.write(JSON.stringify(enregistrement) + ",");
  117. var ele = feed.ele({enregistrement});
  118. } catch (err) {
  119. console.log(err);
  120. }
  121. })
  122. // DEBUG
  123. // console.log(monjson);
  124. // Fermeture des fichiers json, xml et csv
  125. // on ferme le fichier CSV
  126. moncsv.end();
  127. // on écrit le fichier xml
  128. fs.writeFileSync(fichierXml, feed.end({
  129. pretty: true
  130. }));
  131. // on écrit le fichier Json
  132. // fs.writeFileSync(fichierJson, JSON.stringify(maineeduObj), "UTF-8");
  133. json.write('{},]}');
  134. json.end();