Last active
January 6, 2019 10:03
-
-
Save GUIEEN/c7ec3eef7b5474fd0b9e5184f64cbfd3 to your computer and use it in GitHub Desktop.
Use a stream to parse data
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 ! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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