我用Google搜索并检查了几个npm(例如Lazy),但仍然找不到一个好的模式来将字符串插入到文件的第n行。
作为Nodejs的新手,我想这可以像其他语言一样轻松完成,例如: PHP / Ruby。
提前感谢您的解决方案。
答案 0 :(得分:1)
你能做的是:
`var fileData = fs.createReadStream(' filename.extension');'
n-th
行号如果匹配:通过在附加模式下打开文件并遍历到计数器来追加行fileData.write("this is a message");
。
如果没有匹配:打印"找不到这样的位置。错误&#34!;
我可能会使用其中一个输入流,在每行上通知我'模块,例如node-lazy或byline:
var fs = require(' fs'), byline = require(' byline');
var stream = byline(fs.createReadStream(' sample.txt')); stream.on(' line',function(line){ //用线做东西 }); stream.pipe(fs.createWriteStream(' ./输出&#39);
如果您的文件很小,您可以简单地同步读取所有文件并将结果字符串拆分为:
require('fs').readFileSync('abc.txt').toString().split('\n').forEach(function (line) { line; })[1]
另一种方式:
<强> Line-by-line npm 强>
var LineByLineReader = require('line-by-line'),
var lr = new LineByLineReader('big_file.txt');
lr.on('error', function (err) {
// 'err' contains error object
});
lr.on('line', function (line) {
// pause emitting of lines...
lr.pause();
// ...do your asynchronous line processing..
setTimeout(function () {
// ...and continue emitting lines.
lr.resume();
}, 100);
});
lr.on('end', function () {
// All lines are read, file is closed now.
});
您的节点懒惰方式:
var lazy = require("lazy"),
fs = require("fs");
var matched_line_number = 10;// let say 10, can be any
new lazy(fs.createReadStream('./MyVeryBigFile.extension'))
.lines
.forEach(function(line){
console.log(line.toString());
ctr++;
}
);
另一种方式可能是:
var fs = require('fs'),
async = require('async'),
carrier = require('carrier');
async.parallel({
input: fs.openFile.bind(null, './input.txt', 'r'),
output: fs.openFile.bind(null, './output.txt', 'a')
}, function (err, result) {
if (err) {
console.log("An error occured: " + err);
return;
}
carrier.carry(result.input)
.on('line', result.output.write)
.on('end', function () {
result.output.end();
console.log("Done");
});
});
以读取模式打开文件,逐行检查所需的行,同时通过操作行将其写入另一个文件。