1

私はググっていくつかのnpm(Lazyなど)をチェックしましたが、ファイルのn行目に文字列を挿入するための適切なパターンを見つけることができませんでした。

Nodejs の初心者なので、PHP や Ruby などの他の言語と同様に、これは簡単に実行できると思います。

事前に解決策をありがとう。

4

1 に答える 1

1

あなたができることは次のとおりです。

  1. ファイルを読み取りモードで開く

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

  1. 行ごとに読み取り、カウンターを追跡する
  2. こちらのカウンターでご希望のn-th回線番号をご確認ください
  3. 一致した場合: 追加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]

別の方法:

行ごとの 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");
        });
});

ファイルを読み取りモードで開き、目的の行を行ごとにチェックし、同時に行を操作して別のファイルに書き込みます。

于 2013-11-10T09:18:35.127 に答える