2011-09-11 2 views
1

나는 배열로 읽어 들이고 그 다음에 뭔가를하기 위해 파일 번호가있는 숙제를 가지고있다.Node.js 파일에서 배열로 한 줄의 숫자를 읽는 방법

이제 내 문제는 파일을 읽지 못하는 것입니다. 그 방법을 알고 있습니다. 내가 확신 할 수없는 것은 배열에 한 줄을 읽도록하는 방법이다. 그래서 프로그램은 내가해야 할 일을 무엇이든 할 수 있고, 그 줄의 숫자로 작업을 끝내면 다음 줄을 읽는다. .

txt 파일은 꽤 커서 한 줄당 90 개의 숫자가 있고 각 줄은 줄 바꿈으로 끝납니다.

한 번에 한 줄씩 배열을 읽는 방법에 대한 정보는 크게 감사하겠습니다. 고맙습니다.

+0

전체 파일을 읽고 줄을 만들어야합니다. – Raynos

+0

파일이 너무 큰 경우 더 좋은 해결책이 있습니다. –

+0

스트림을 생성하고 게으른에 넘기 : 이 http://stackoverflow.com/questions/6156501/read-a-file-one-line-at-a-time-in-node-js –

답변

1

파일이 큰 경우 가장 쉬운 방법은 fs.Readstream입니다.

var fs = require('fs'); 

var 
    remaining = ""; 
    lineFeed = "\n", 
    lineNr = 0; 

fs.createReadStream('data.txt', { encoding: 'utf-8' }) 
    .on('data', function (chunk) { 
    // store the actual chunk into the remaining 
    remaining = remaining.concat(chunk); 

    // look that we have a linefeed 
    var lastLineFeed = remaining.lastIndexOf(lineFeed); 

    // if we don't have any we can continue the reading 
    if (lastLineFeed === -1) return; 

    var 
     current = remaining.substring(0, lastLineFeed), 
     lines = current.split(lineFeed); 

    // store from the last linefeed or empty it out 
    remaining = (lastLineFeed > remaining.length) 
     ? remaining.substring(lastLineFeed + 1, remaining.length) 
     : ""; 

    for (var i = 0, length = lines.length; i < length; i++) { 
     // process the actual line 
     _processLine(lines[i], lineNr++); 
    } 
    }) 
    .on('end', function (close) { 
    // TODO I'm not sure this is needed, it depends on your data 
    // process the reamining data if needed 
    if (remaining.length > 0) _processLine(remaining, lineNr); 
    }); 

function _processLine(line, lineNumber) { 
    // UPDATE2 with parseFloat 
    var numbers = line.split(" ").map(function (item) { return parseFloat(item); }); 
    console.log(numbers, lineNumber); 
} 
+0

KARASZI, 예제에서 파일의 각 줄을 'lines'배열의 요소 또는 줄의 각 번호를 요소로 만드나요? 그 첫 번째 경우, 어떻게 각 숫자가 요소가되는 배열로 각 줄을 나눌 수 있습니까? – user939287

+0

원래 게시물을 다시 읽었을 때 각 줄이 배열의 요소가되도록 요청하는 것처럼 들립니다. 미안합니다. 내가하고 싶은 것은 스크립트에서 줄을 읽고 멈추게하는 것입니다. 각 숫자가 배열의 요소 인 배열로 줄을 나눕니다. 배열에 대한 계산이 끝나면 지우고 다음 줄로 이동하여 분할하고 해당 줄의 각 숫자를 배열에 넣습니다. 파일의 각 줄에는 약 90 개의 숫자가 있으므로 파일의 각 줄마다 다시 사용할 90 개의 요소가있는 배열을 사용하게됩니다. – user939287

+0

그건 Node.js 일을하는 방식이 아닙니다. 당신은 멈추지 않고 이벤트 지향적입니다. –

관련 문제