targetlist.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. // libvrairie de lecture de lignes de texte
  7. var readline = require('readline')
  8. // librairie de traitement du pinyin
  9. // const pinyinizer = require('pinyinizer')
  10. // librairie de gestion du hanzi
  11. // const opencc = require('node-opencc')
  12. // librairie de gestion des fichiers csv
  13. var csv = require('comma-separated-values')
  14. // Nom du fichier entrée csv
  15. // en entrée, on donne le nom du fichier à traiter sans le répertoire
  16. var repertoireInitial = './'
  17. var argument = argv._[0]
  18. fichierDonnées = path.join(repertoireInitial, argument)
  19. // DEBUG
  20. // console.log(fichierDonnées);
  21. // Nom du fichier xml
  22. fichierXml = fichierDonnées.replace('.csv','.xml')
  23. // DEBUG
  24. console.log(fichierXml)
  25. var tab = "\t"
  26. var rc = "\n"
  27. var ligne = {
  28. numero: '',
  29. lettre: '',
  30. pinyin: '',
  31. hanzi: '',
  32. translation: '',
  33. themodule: '',
  34. unit: '',
  35. book: ''
  36. }
  37. function resetLigne () {
  38. numero = ''
  39. lettre = ''
  40. pinyin = ''
  41. hanzi = ''
  42. translation = ''
  43. themodule = ''
  44. unit = ''
  45. book = ''
  46. }
  47. // la ligne CSV qu'on lit
  48. var ligneCSV = ''
  49. prelude = `
  50. <informaltable colsep="0" rowsep="0" frame="none">
  51. <tgroup cols="3">
  52. <colspec colname="c1" colnum="1" colwidth="1.0*" align="center"/>
  53. <colspec colname="c2" colnum="2" colwidth="1.0*" align="center"/>
  54. <colspec colname="c3" colnum="3" colwidth="15.0*" align="left"/>
  55. <tbody>
  56. `
  57. fin = `
  58. </tbody>
  59. </tgroup>
  60. </informaltable>
  61. `
  62. // on crée et ouvre le fichier de sortie xml
  63. var monxml = fs.createWriteStream(fichierXml);
  64. // on ouvre et lit le fichier csv
  65. var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8");
  66. var moncsv = new csv(fichierATraiter, {
  67. header: [
  68. 'numero',
  69. 'lettre',
  70. 'pinyin',
  71. 'hanzi',
  72. 'translation',
  73. 'themodule',
  74. 'unit',
  75. 'book'
  76. ],
  77. cast: [
  78. 'String',
  79. 'String',
  80. 'String',
  81. 'String',
  82. 'String',
  83. 'String',
  84. 'String',
  85. 'String'
  86. ]
  87. }).parse();
  88. // écriture du prélude
  89. monxml.write(prelude)
  90. monxml.write(rc)
  91. // transformation et écriture des lignes dans le fichier xml
  92. moncsv.forEach(function(enregistrement){
  93. // DEBUG
  94. // try {
  95. // console.log(enregistrement.numero)
  96. console.log(enregistrement.pinyin)
  97. // console.log(enregistrement.hanzi)
  98. // console.log(enregistrement.translation)
  99. // } catch (err) {
  100. // console.log (erreur)
  101. // }
  102. monxml.write('<row>')
  103. monxml.write(rc)
  104. monxml.write(tab)
  105. monxml.write('<entry>')
  106. monxml.write(enregistrement.numero)
  107. monxml.write('</entry>')
  108. monxml.write(rc)
  109. monxml.write('<entry>')
  110. monxml.write(enregistrement.lettre)
  111. monxml.write('</entry>')
  112. monxml.write(rc)
  113. monxml.write(tab)
  114. monxml.write('<entry><foreignphrase xml:lang="cmn-Latn-pinyin">')
  115. monxml.write(enregistrement.pinyin)
  116. monxml.write('</foreignphrase></entry>')
  117. monxml.write(rc)
  118. monxml.write('</row>')
  119. monxml.write(rc)
  120. monxml.write('<row>')
  121. monxml.write(rc)
  122. monxml.write(tab)
  123. monxml.write('<entry/>')
  124. monxml.write(rc)
  125. monxml.write(tab)
  126. monxml.write('<entry/>')
  127. monxml.write(rc)
  128. monxml.write(tab)
  129. monxml.write('<entry><foreignphrase xml:lang="cmn-Hani">')
  130. monxml.write(enregistrement.hanzi)
  131. monxml.write('</foreignphrase></entry>')
  132. monxml.write(rc)
  133. monxml.write('</row>')
  134. monxml.write(rc)
  135. monxml.write('<row>')
  136. monxml.write(rc)
  137. monxml.write(tab)
  138. monxml.write('<entry/>')
  139. monxml.write(rc)
  140. monxml.write(tab)
  141. monxml.write('<entry/>')
  142. monxml.write(rc)
  143. monxml.write(tab)
  144. monxml.write('<entry>')
  145. monxml.write(enregistrement.translation)
  146. monxml.write('</entry>')
  147. monxml.write(rc)
  148. monxml.write('</row>')
  149. monxml.write(rc)
  150. monxml.write('<row><entry/><entry/><entry/></row>')
  151. resetLigne()
  152. })
  153. // écriture de la fin dans le fichier xml
  154. monxml.write(fin)
  155. // fermeture du fichier de sortie xml
  156. monxml.end()