私はググっていくつかのnpm(Lazyなど)をチェックしましたが、ファイルのn行目に文字列を挿入するための適切なパターンを見つけることができませんでした。
Nodejs の初心者なので、PHP や Ruby などの他の言語と同様に、これは簡単に実行できると思います。
事前に解決策をありがとう。
あなたができることは次のとおりです。
`var fileData = fs.createReadStream('filename.extension');'
n-th
回線番号をご確認ください一致した場合: 追加fileData.write("this is a message");
モードでファイルを開き、カウンターまでトラバースして、行を追加します。一致しなかった場合: print "No such position found. Error!" 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('./output');
ファイルが小さい場合は、すべてのファイルを同期的に読み取り、結果の文字列を次のように分割できます。
require('fs').readFileSync('abc.txt').toString().split('\n').forEach(function (line) { line; })[1]
別の方法:
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");
});
});
ファイルを読み取りモードで開き、目的の行を行ごとにチェックし、同時に行を操作して別のファイルに書き込みます。