Skip to content

Instantly share code, notes, and snippets.

@GUIEEN
Last active January 6, 2019 10:03
Show Gist options
  • Save GUIEEN/c7ec3eef7b5474fd0b9e5184f64cbfd3 to your computer and use it in GitHub Desktop.
Save GUIEEN/c7ec3eef7b5474fd0b9e5184f64cbfd3 to your computer and use it in GitHub Desktop.
Use a stream to parse data
import fs from 'fs'
import Stream from 'stream'
import { StringDecoder } from 'string_decoder'
import through from 'through2'
const string = `
Bright Black 90 100 85,85,85 128,128,128 128,128,128 129,131,131 85,85,85 127,127,127 127,127,127 128,128,128
Bright Red 91 101 255,85,85 255,0,0 255,0,0 252,57,31 255,85,85 255,0,0 255,0,0 255,0,0
`
const decoder = new StringDecoder('utf8')
const split = () => {
function parser(rs: Stream.Transform | Stream.Readable, buffer: Buffer) {
const decoded = decoder.write(buffer)
const splited = decoded.split('\n').map(e => e.split('\t', 3))
for (let i of splited) {
for (let k of i) {
// rs.setEncoding('utf-8')
rs.push(k)
}
}
console.log('splited : ', splited)
}
return through.obj(function(buffer: Buffer, enc, done) {
parser(this, buffer)
done()
})
}
let i = 0
fs.createReadStream('./test.txt')
.pipe(split())
.on('data', function(buffer) {
console.log(`${i++} βœ… buffer : `, buffer)
})
.on('finish', () => console.log('🌈 Finished !'))
const rs = new Stream.Readable()
i = 0
rs._read = () => {
console.log('πŸ˜„ It is started reading')
}
rs.push(string)
// rs.push(null)
rs.pipe(split())
.on('data', function(buffer) {
console.log(`${i++} ❌ buffer : `, buffer)
})
.on('finish', () => console.log('🌈 Finished !'))
rs.read()
// πŸ˜„ It is started reading
// 0 ❌ buffer :
// 1 ❌ buffer : Bright Black
// 2 ❌ buffer : 90
// 3 ❌ buffer : 100
// 4 ❌ buffer : Bright Red
// 5 ❌ buffer : 91
// 6 ❌ buffer : 101
// 7 ❌ buffer :
// splited : [ [ '' ],
// [ 'Bright Black', '90', '100' ],
// [ 'Bright Red', '91', '101' ],
// [ '' ] ]
// 8 βœ… buffer : Bright Black
// 9 βœ… buffer : 90
// 10 βœ… buffer : 100
// 11 βœ… buffer : Bright Red
// 12 βœ… buffer : 91
// 13 βœ… buffer : 101
// splited : [ [ 'Bright Black', '90', '100' ],
// [ 'Bright Red', '91', '101' ] ]
// 🌈 Finished !
import fs from 'fs'
import Stream from 'stream'
import { StringDecoder } from 'string_decoder'
import through from 'through2'
const string = `
Black 30 40 0,0,0 1,1,1
Red 31 41 170,0,0 128,0,0 128,0,0 194,54,33 187,0,0 127,0,0 205,0,0 255,0,0 222,56,43
Green 32 42 0,170,0 0,128,0 0,128,0 37,188,36 0,187,0 0,147,0 0,205,0 0,255,0 57,181,74
Yellow 33 43 170,85,0[nb 6] 128,128,0 238,237,240 173,173,39 187,187,0 252,127,0 205,205,0 255,255,0 255,199,6
Blue 34 44 0,0,170 0,0,128 0,0,128 73,46,225 0,0,187 0,0,127 0,0,238[23] 0,0,255 0,111,184
Magenta 35 45 170,0,170 128,0,128 1,36,86 211,56,211 187,0,187 156,0,156 205,0,205 255,0,255 118,38,113
Cyan 36 46 0,170,170 0,128,128 0,128,128 51,187,200 0,187,187 0,147,147 0,205,205 0,255,255 44,181,233
White 37 47 170,170,170 192,192,192 192,192,192 203,204,205 187,187,187 210,210,210 229,229,229 255,255,255 204,204,204
Bright Black 90 100 85,85,85 128,128,128 128,128,128 129,131,131 85,85,85 127,127,127 127,127,127 128,128,128
Bright Red 91 101 255,85,85 255,0,0 255,0,0 252,57,31 255,85,85 255,0,0 255,0,0 255,0,0
Bright Green 92 102 85,255,85 0,255,0 0,255,0 49,231,34 85,255,85 0,252,0 0,255,0 144,238,144 0,255,0
Bright Yellow 93 103 255,255,85 255,255,0 255,255,0 234,236,35 255,255,85 255,255,0 255,255,0 255,255,224 255,255,0
Bright Blue 94 104 85,85,255 0,0,255 0,0,255 88,51,255 85,85,255 0,0,252 92,92,255[24] 173,216,230 0,0,255
Bright Magenta 95 105 255,85,255 255,0,255 255,0,255 249,53,248 255,85,255 255,0,255 255,0,255 255,0,255
Bright Cyan 96 106 85,255,255 0,255,255 0,255,255 20,240,240 85,255,255 0,255,255 0,255,255 224,255,255 0,255,255
Bright White 97 107 255,255,255 255,255,255 255,255,255 233,235,235 255,255,255 255,255,255 255,255,255
`
const decoder = new StringDecoder('utf8')
const split = () => {
function parser(rs: Stream.Transform | Stream.Readable, buffer: Buffer) {
const decoded = decoder.write(buffer)
const splited = decoded.split('\n').map(e => e.split('\t', 3))
for (let i of splited) {
for (let k of i) {
// rs.setEncoding('utf-8')
if (k === '') continue
if (k.indexOf(' ') > 0) {
k = k.split(' ').join('')
}
rs.push(k)
}
}
// console.log('splited : ', splited)
}
return through.obj(function(buffer: Buffer, enc, done) {
parser(this, buffer)
done()
})
}
let i = 0
// fs.createReadStream('./test.txt')
// .pipe(split())
// .on('data', function(buffer) {
// console.log(`${i++} βœ… buffer : `, buffer)
// })
// .on('finish', () => console.log('🌈 Finished !'))
const rs = new Stream.Readable()
i = 0
let FgStr = '',
BgStr = '',
tmp = []
rs._read = () => {
console.log('πŸ˜„ It is started reading')
}
rs.push(string)
rs.push(null)
const ws = fs.createWriteStream('./a.txt')
rs.pipe(split())
.on('data', function(buffer) {
if (i === 2) {
FgStr += `Fg${tmp[0]} = '\\x1b[${tmp[1]}m'\n`
BgStr += `Bg${tmp[0]} = '\\x1b[${buffer}m'\n`
tmp = []
} else {
tmp.push(buffer)
}
// console.log(`${i++} ❌ buffer : `, buffer)
i++
i %= 3
// console.log(i)
})
.on('finish', () => {
console.log('🌈 Finished !')
ws.write(FgStr)
ws.write('\n\n')
ws.write(BgStr)
})
rs.read()
// FgBlack = '\x1b[30m'
// FgRed = '\x1b[31m'
// FgGreen = '\x1b[32m'
// FgYellow = '\x1b[33m'
// FgBlue = '\x1b[34m'
// FgMagenta = '\x1b[35m'
// FgCyan = '\x1b[36m'
// FgWhite = '\x1b[37m'
// FgBrightBlack = '\x1b[90m'
// FgBrightRed = '\x1b[91m'
// FgBrightGreen = '\x1b[92m'
// FgBrightYellow = '\x1b[93m'
// FgBrightBlue = '\x1b[94m'
// FgBrightMagenta = '\x1b[95m'
// FgBrightCyan = '\x1b[96m'
// FgBrightWhite = '\x1b[97m'
// BgBlack = '\x1b[40m'
// BgRed = '\x1b[41m'
// BgGreen = '\x1b[42m'
// BgYellow = '\x1b[43m'
// BgBlue = '\x1b[44m'
// BgMagenta = '\x1b[45m'
// BgCyan = '\x1b[46m'
// BgWhite = '\x1b[47m'
// BgBrightBlack = '\x1b[100m'
// BgBrightRed = '\x1b[101m'
// BgBrightGreen = '\x1b[102m'
// BgBrightYellow = '\x1b[103m'
// BgBrightBlue = '\x1b[104m'
// BgBrightMagenta = '\x1b[105m'
// BgBrightCyan = '\x1b[106m'
// BgBrightWhite = '\x1b[107m'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment