const fs = require('fs'); const readline = require('readline'); // librairie de traitement du pinyin const pinyinizer = require('pinyinizer') var stringify = require('json-stringify'); // utilitaires var tab = '\t' var endLine = '\n' var ligne = { hanzi: '', traditional: '', pinyin: '', translations: [] } function resetLigne () { ligne.hanzi = '' ligne.traditional = '' ligne.pinyin = '' ligne.translations = [] ligne.origin = '' } var outputFile = 'ch.csv'; const rl = readline.createInterface({ input: fs.createReadStream('chdict.u8') }); // Each new line emits an event - every time the stream receives \r, \n, or \r\n rl.on('line', (line) => { //console.log(line); if (line[0] != '#') { if (line.length > 2) { chinois = line.split(' ', 2) // console.log(chinois[0], " ## ", chinois[1]); ligne.traditional = chinois[0] ligne.hanzi = chinois[1] ligne.origin = 'Chdict' i = line.search(/\[/) j = line.search(/\]/) phonetic = line.substr(i + 1, j - i - 1) // traitement des champs pinyin avec des chiffres phonetic = phonetic.toLowerCase() // on va tester ça ... try { var sauve = phonetic phonetic = pinyinizer.pinyinize(phonetic) phonetic = phonetic.replace(/5/g, '') } catch (err) { console.log('Erreur: ' + pinyin) phonetic = sauve } ligne.pinyin = phonetic // console.log(phonetic); ligne.translations = line.split(/\//g) //var l = ligne.translations.length ligne.translations.pop() ligne.translations.shift() var temp = ligne.translations.join(' / ') // console.log(l); // console.log(ligne.translations); // console.log(JSON.stringify(ligne)); var tableau = temp.match(/\[.*?\]/g); if (tableau != null) { tableau.forEach(function(t) { t = t.replace("u:","v"); var t1 = pinyinizer.pinyinize(t); //console.log(t, "-", t1); temp = temp.replace(t, t1); temp = temp.replace("5",""); //console.log(temp); }); } ligneCSV = ligne.hanzi + tab + ligne.traditional + tab + ligne.pinyin + tab + temp + tab + ligne.origin + tab + endLine fs.appendFileSync(outputFile, ligneCSV) resetLigne() } } }); rl.on('close', () => { console.log('Done reading file'); });