我不想连续登录文件,但每1000行之后我想更改为新文件。现在我的方法是这样的:
var fs = require('fs');
...
var outputStream = fs.createWriteStream(fileName + '.csv');
outputStream.write(content, 'utf8', callback);
...
if (lineCounter === 1000) {
outputStream.end(function(err) {
outputStream = fs.createWriteStream(fileName2 + '.csv');
outputStream.write(content, 'utf8', callback);
});
}
最后文件不包含最后几行。我愿意接受任何解决方案,我只需要将流写入几个文件。
提前致谢!
答案 0 :(得分:0)
起初我尝试使用Highland.js的流,但由于某种原因我无法暂停它们。我发布的脚本已经过测试,它正在运行。我最后分享了原始资料。所以,我实际上还没有开始阅读第二个文件,但我相信现在很容易,因为在脚本达到定义的行限制之后你有必要继续前进。
var stream = require('stream'),
fs = require('fs'),
readStream = fs.createReadStream('./stream.txt', {highWaterMark: 15}),
limitStream = new stream.Transform(),
limit = 0
limitStream._transform = function(chunk, encoding, cb) {
if (++limit <= 5) {
console.log('before', limit)
return cb(null, chunk + '\n')
}
console.log('after',limit)
this.end()
cb()
}
limitStream.on('unpipe', function() { console.log('unpipe emitted from limitStream') })
limitStream.on('end', function() { console.log('end emitted from limitStream') })
readStream.pipe(limitStream).pipe(process.stdout)
来源:https://groups.google.com/forum/#!topic/nodejs/eGukJUQrOBY
在发布答案后,我找到了可以工作的库,但我承认我还没有测试过它。我只是将其作为参考点分享:https://github.com/isaacs/truncating-stream