Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在NodeJS中读取大文件?_Node.js_Sed - Fatal编程技术网

Node.js 如何在NodeJS中读取大文件?

Node.js 如何在NodeJS中读取大文件?,node.js,sed,Node.js,Sed,我正在尝试读取一个2000万行的文件,并更正从windows到mac的行尾。我知道这可以在sed中完成,但是sed给了我一个我不知道如何修复的错误(dos2unix:Binary symbol 0x0008,位于第625060行)。所以我正试图在NodeJS中解决这个问题。这是我的密码: var fs = require('fs'); var eol = require('eol'); //read file var input = fs.readFileSync(process.argv[2

我正在尝试读取一个2000万行的文件,并更正从windows到mac的行尾。我知道这可以在sed中完成,但是sed给了我一个我不知道如何修复的错误(dos2unix:Binary symbol 0x0008,位于第625060行)。所以我正试图在NodeJS中解决这个问题。这是我的密码:

var fs = require('fs');
var eol = require('eol');

//read file
var input = fs.readFileSync(process.argv[2], 'utf8');

//fix lines
output = eol.auto(input);
console.log("Lines Fixed! Now Writing....")

//write file
fs.writeFile(process.argv[2] + '_fixed.txt', output, function (err) {
  if (err) return console.log(err); 
});
console.log("Done!")
问题是文件太大,我得到了这个错误缓冲区。js:513
抛出新错误(''toString()'failed')

你不应该同时做。 处理大数据的最佳方式是流:

let output = '';

const readStream = fs.createReadStream(filename);

readStream.on('data', function(chunk) {
  output += eol.auto(chunk.toString('utf8'));
});

readStream.on('end', function() {
  console.log('finished reading');
  // write to file here.
});

对于读取非常大的文件,您最好不要将整个文件读入内存,您可以按行或按块读取文件。关于如何使用nodejs按行或按块读取大文件,请参阅我的文章。

可能重复的文章我主要想知道如何拆分文件并在nodejs中执行。我只是添加了sed解释,因为我要求的每个人都告诉我在sed中执行,而我不能。什么是eol.auto?它是用来播放文本的库。方法“自动”规范化行尾。如果您不需要它,您可以简单地删除它。