hsk16.js 3.6 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. // 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 = 'hsk16-table.xml'
  16. var fichierJson = 'hsk16-table.json'
  17. var fichierCSV = 'hsk16-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('hsk16table', {
  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('{"hsk16":[')
  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. 'grammartype',
  52. 'classifier',
  53. 'lesson',
  54. 'sound',
  55. 'origin'
  56. ]
  57. }).parse()
  58. // la ligne CSV qu'on va écrire dans le fichier CSV
  59. var ligneCSV = ''
  60. // L'élément xml qui constitue un enregistrement du fichier xml
  61. var ele = null
  62. monjson.forEach(function (enregistrement) {
  63. // DEBUG
  64. // console.log(enregistrement.hanzi);
  65. ligneCSV = ''
  66. ele = null
  67. try {
  68. // enregistrement.traditional = opencc.simplifiedToTraditional(
  69. // enregistrement.hanzi
  70. // )
  71. // DEBUG
  72. // console.log(enregistrement.hanzi, "**", enregistrement.traditional);
  73. // console.log(enregistrement.translation);
  74. enregistrement.translation = enregistrement.translation.replace(/;/g, ' /')
  75. enregistrement.translation = enregistrement.translation.replace(
  76. /, /g,
  77. ' / '
  78. )
  79. if (enregistrement.classifier == '') {
  80. enregistrement.classifier = ''
  81. }
  82. // console.log(enregistrement.translation);
  83. ligneCSV =
  84. enregistrement.hanzi +
  85. tab +
  86. enregistrement.traditional +
  87. tab +
  88. enregistrement.pinyin +
  89. tab +
  90. enregistrement.translation +
  91. tab +
  92. enregistrement.grammartype +
  93. tab +
  94. enregistrement.classifier +
  95. tab +
  96. enregistrement.lesson +
  97. tab +
  98. enregistrement.sound +
  99. tab +
  100. enregistrement.origin +
  101. endLine
  102. // DEBUG console.log(ligneCSV);
  103. // Ecriture de la ligne CSV
  104. moncsv.write(ligneCSV)
  105. // Ecriture de la ligne json
  106. json.write(JSON.stringify(enregistrement) + ',')
  107. var ele = feed.ele({ enregistrement })
  108. } catch (err) {
  109. console.log(err)
  110. }
  111. })
  112. // DEBUG
  113. // console.log(monjson);
  114. // Fermeture des fichiers json, xml et csv
  115. // on ferme le fichier CSV
  116. moncsv.end()
  117. // on écrit le fichier xml
  118. fs.writeFileSync(
  119. fichierXml,
  120. feed.end({
  121. pretty: true
  122. })
  123. )
  124. // on écrit le fichier Json
  125. // fs.writeFileSync(fichierJson, JSON.stringify(maineeduObj), "UTF-8");
  126. json.write('{},]}')
  127. json.end()