[英]NodeJS: Detect last new line byte from Readable Stream when reading by Range to parse large CSV file
描述
我有一个非常大的 CSV 文件(大约 1 GB),我想以每个大约 10 MB 的字节块进行处理。 为此,我创建了一个带有字节范围选项fs.createReadStream(sampleCSVfile, { start: 0, end: 10000000 })
的可读流
问题
使用上述方法,从 CSV 文件读取的流包含不完全完整的最后一行的数据。 我想要一种方法来识别发生最后一个换行符的字节索引,并使用该字节索引开始我的下一个可读流。
示例 CSV:(忽略标题行)
John,New York,52
Stacy,Chicago,19
Lisa,Indianapolis,40
示例操作:
fs.createReadStream(sampleCSVfile, { start: 0, end: 99 })
返回的数据:(修剪到上面指定的字节范围)
John,New York,52
Stacy,Chicago,19
Lisa,I
要求或预期:
John,New York,52
Stacy,Chicago,19
因此,假设从流中获取以字节索引 78 结尾的最后一行,那么我的下一个递归操作将是: fs.createReadStream(sampleCSVfile, { start: 79, end: 178 })
下面是基本代码
const fs = require('fs');
let stream =fs.createReadStream('test.csv', { start:0, end:40})
stream.on('data', (data) => {
console.log(data.length); //
let a = data.toString()
console.log(a);
let i = a.lastIndexOf('\n');
console.log(i);
let substr= a.substring(0, i);
console.log(substr);
let byteLength= Buffer.byteLength(substr);
console.log(byteLength);
});
演示: https : //repl.it/@sandeepp2016/SpiritedRowdyObject
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.