0

私はファイルを行ごとに読み取るためにlazyandを使用しています(参照):fs

Lazy = require('lazy');
fs = require('fs');

lazy = new Lazy(fs.createReadStream(filename, {
  encoding: 'utf8'
}));

lazy.lines.forEach(function(line) {
  line = String(line);
  // more stuff...
}

奇妙なことに、空の行が読み取らString(line)れると、文字列が返されます00が空の行の結果なのか、行に実際に単一の文字が含まれているのかを区別する方法が見つからないため、これは問題です0

なぜそうなのですか?そして、この問題を解決するにはどうすればよいですか?

4

1 に答える 1

4

これは確かに Lazy モジュールのバグです。再現できます。

問題はこの行です:

finalBufferLength = buffers.reduce(function(left, right) { return (left.length||left) + (right.length||right); }, 0);

そこには暗黙的な文字列変換があります(したがって、数値0は string に変換されます"0")。これにより修正されるためです。

finalBufferLength = buffers.reduce(function(left, right) { return Number(left.length||left) + Number(right.length||right); }, 0);

Lazy は DOS スタイルの行末でのみテストされたようです。なぜなら、それらを含むファイルをフィードすると、問題なく動作するからです。そのため、簡単な修正として、これを使用できると思います。

lazy
  .map(function(chunk) {
    // replace Unix-style (LF) line ending with DOS-style (CRLF)
    return chunk.replace(/(?!\r)\n/g, '\r\n');
  })
  .lines
  .forEach(function(line) {
    console.log('L', line.toString());
  });
于 2013-05-26T06:07:55.173 に答える