프로그래밍 언어/HTML,CSS,JS

node.js에서 파일을 한 번에 한 줄씩 읽는 방법

Rateye 2021. 7. 29. 09:50
728x90
반응형
질문 : node.js에서 한 번에 한 줄씩 파일을 읽습니까?

큰 파일을 한 번에 한 줄씩 읽으려고합니다. 나는 주제를 다룬 Quora에 대한 질문을 찾았지만 모든 것을 함께 맞추기위한 몇 가지 연결이 누락되었습니다.

 var Lazy=require("lazy");
 new Lazy(process.stdin)
     .lines
     .forEach(
          function(line) { 
              console.log(line.toString()); 
          }
 );
 process.stdin.resume();

내가 알아 내고 싶은 부분은이 샘플 에서처럼 STDIN 대신 파일에서 한 번에 한 줄씩 읽는 방법입니다.

나는 시도했다 :

 fs.open('./VeryBigFile.csv', 'r', '0666', Process);

 function Process(err, fd) {
    if (err) throw err;
    // DO lazy read 
 }

하지만 작동하지 않습니다. 나는 핀치에서 PHP와 같은 것을 사용하는 것으로 돌아갈 수 있다는 것을 알고 있지만 이것을 이해하고 싶습니다.

파일이 내가 실행중인 서버가 메모리를 가지고있는 것보다 훨씬 크기 때문에 다른 대답이 작동하지 않을 것이라고 생각합니다.

답변

Node.js v0.12부터 Node.js v4.0.0부터 안정적인 readline 코어 모듈이 있습니다. 다음은 외부 모듈없이 파일에서 줄을 읽는 가장 쉬운 방법입니다.

const fs = require('fs');
const readline = require('readline');

async function processLineByLine() {
  const fileStream = fs.createReadStream('input.txt');

  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity
  });
  // Note: we use the crlfDelay option to recognize all instances of CR LF
  // ('\r\n') in input.txt as a single line break.

  for await (const line of rl) {
    // Each line in input.txt will be successively available here as `line`.
    console.log(`Line from file: ${line}`);
  }
}

processLineByLine();

또는 :

var lineReader = require('readline').createInterface({
  input: require('fs').createReadStream('file.in')
});

lineReader.on('line', function (line) {
  console.log('Line from file:', line);
});

마지막 줄에는 마지막이없는 경우에도, (노드 v0.12 이상 기준) 제대로 읽어 \n .

업데이트 :이 예제는 Node의 API 공식 문서 에 추가되었습니다.

출처 : https://stackoverflow.com/questions/6156501/read-a-file-one-line-at-a-time-in-node-js
728x90
반응형