Nodejs如何轻松地将string插入到文件的第n行?
我search了一下,并检查了几个npm(例如懒惰),但仍然找不到一个好的模式插入到第n个文件行的string。
作为Nodejs的新手,我想这可以像其他语言一样轻松完成,例如PHP / Ruby。
提前感谢您的解决scheme。
你可以做的是:
- 以读取模式打开文件
`var fileData = fs.createReadStream('filename.extension');'
- 逐行阅读并跟踪一个计数器
- 用你想要
n-th
行号码检查这个计数器 -
如果匹配:追加行
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"); }); });
以读取模式打开文件,逐行检查所需的行,并同时将其写入另一个文件并操作行。