首先我用我的代码逐行读取了文件。 (文件中约有1650行)
第二次,我将文件的每一行重新分成多行。
3rd我想将输出写入一个新文件。不幸的是,它并没有写超过16800行的所有行。输出大约在15500行左右。
第三次,我使用以下代码:
var inputArr; //Splited Input of one line
var Text; //inputArr transformed to a String with many lines (per start line)
var lineCounter = 0; //counts the expacted number of output lines
const fs = require('fs');
const writeStream = fs.createWriteStream('./output.txt');
for(var i=0; i<= inputArr.length; i++) {
writeStream.write(Text);
lineCounter = lineCounter + 1;
}
writeStream.end();
我该怎么做才能将所有行写入输出文件?
答案 0 :(得分:0)
我该怎么做才能将所有行写入输出文件?
如果不检测流何时已满然后等待它说可以再次写入,就无法写入大量数据。 stream.writable doc中有一个非常详细的示例。
这是该文档的摘录,显示了如何执行此操作:
// Write the data to the supplied writable stream one million times.
// Be attentive to back-pressure.
function writeOneMillionTimes(writer, data, encoding, callback) {
let i = 1000000;
write();
function write() {
let ok = true;
do {
i--;
if (i === 0) {
// last time!
writer.write(data, encoding, callback);
} else {
// see if we should continue, or wait
// don't pass the callback, because we're not done yet.
ok = writer.write(data, encoding);
}
} while (i > 0 && ok);
if (i > 0) {
// had to stop early!
// write some more once it drains
writer.once('drain', write);
}
}
}
基本上,您必须注意stream.write()
的返回值,当它指出流已满时,您必须重新开始编写drain
事件。
您不会同时显示阅读和写作的全部代码。如果您只是读取一个流,对其进行修改,然后将结果写入另一个文件,则可能应该使用管道传输,也许要进行转换,然后流将为您自动处理所有读取,写入和反压检测。
您可以阅读有关转换流here的信息,因为这听起来像您真正想要的。然后,您可以将转换流的输出通过管道传输到输出流文件,并且所有背压都将自动为您处理。