frames.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  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 frame="none" colsep="0" rowsep="0">
  51. <tgroup cols="3">
  52. <colspec colnum="1" colname="col1" colwidth="2.0*"/>
  53. <colspec colnum="2" colname="col2" colwidth="2.0*"/>
  54. <colspec colnum="3" colname="col3" colwidth="15.0*"/>
  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. lineNumber = 0
  92. // transformation et écriture des lignes dans le fichier xml
  93. moncsv.forEach(function (enregistrement) {
  94. // DEBUG
  95. //console.log(enregistrement.numero)
  96. lineNumber = lineNumber + 1
  97. console.log('lineNumber : ',lineNumber)
  98. monxml.write('<row>')
  99. monxml.write(rc)
  100. monxml.write(tab)
  101. monxml.write('<entry>')
  102. monxml.write(enregistrement.numero)
  103. monxml.write('</entry>')
  104. monxml.write(rc)
  105. monxml.write('<entry>')
  106. monxml.write(enregistrement.lettre)
  107. monxml.write('</entry>')
  108. monxml.write(rc)
  109. monxml.write(tab)
  110. monxml.write('<entry><foreignphrase xml:lang="cmn-Latn-pinyin">')
  111. monxml.write(enregistrement.pinyin)
  112. monxml.write('</foreignphrase></entry>')
  113. monxml.write(rc)
  114. monxml.write('</row>')
  115. monxml.write(rc)
  116. monxml.write('<row>')
  117. monxml.write(rc)
  118. monxml.write(tab)
  119. monxml.write('<entry/>')
  120. monxml.write(rc)
  121. monxml.write(tab)
  122. monxml.write('<entry/>')
  123. monxml.write(rc)
  124. monxml.write(tab)
  125. monxml.write('<entry><foreignphrase xml:lang="cmn-Hani">')
  126. monxml.write(enregistrement.hanzi)
  127. monxml.write('</foreignphrase></entry>')
  128. monxml.write(rc)
  129. monxml.write('</row>')
  130. monxml.write(rc)
  131. monxml.write('<row>')
  132. monxml.write(rc)
  133. monxml.write(tab)
  134. monxml.write('<entry/>')
  135. monxml.write(rc)
  136. monxml.write(tab)
  137. monxml.write('<entry/>')
  138. monxml.write(rc)
  139. monxml.write(tab)
  140. monxml.write('<entry>')
  141. monxml.write(enregistrement.translation)
  142. monxml.write('</entry>')
  143. monxml.write(rc)
  144. monxml.write('</row>')
  145. monxml.write(rc)
  146. resetLigne()
  147. })
  148. // écriture de la fin dans le fichier xml
  149. monxml.write(fin)
  150. // fermeture du fichier de sortie xml
  151. monxml.end()