Nodejs如何轻松地将string插入到文件的第n行?

我search了一下,并检查了几个npm(例如懒惰),但仍然找不到一个好的模式插入到第n个文件行的string。

作为Nodejs的新手,我想这可以像其他语言一样轻松完成,例如PHP / Ruby。

提前感谢您的解决scheme。

你可以做的是:

  1. 以读取模式打开文件

`var fileData = fs.createReadStream('filename.extension');'

  1. 逐行阅读并跟踪一个计数器
  2. 用你想要n-th行号码检查这个计数器
  3. 如果匹配:追加行fileData.write("this is a message"); 通过以追加模式打开文件并遍历计数器。 如果不匹配:print“找不到这样的位置,错误!” 我可能会使用'给定的inputstream,通知我在每一行'模块,例如节点懒惰或byline:

    var fs = require('fs'),byline = require('byline');

    var stream = byline(fs.createReadStream('sample.txt')); stream.on('line',function(line){//用东西做东西}); stream.pipe(fs.createWriteStream( './输出');

如果你的文件很小,你可以简单地读取所有的文件,并像下面这样分割结果string:

require('fs').readFileSync('abc.txt').toString().split('\n').forEach(function (line) { line; })[1]

其他方式:

逐行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"); }); }); 

以读取模式打开文件,逐行检查所需的行,并同时将其写入另一个文件并操作行。