Javascript를 사용하여 로컬 텍스트 파일을 읽고 한 줄씩 읽는 방법은 무엇입니까?


85

데모 인 html + javascript로 만든 웹 페이지가 있는데, csv 파일에서 데이터를 추출 할 수 있도록 로컬 csv 파일을 읽고 한 줄씩 읽는 방법을 알고 싶습니다.



2
브라우저 호환성 요구 사항이 있습니까? 특히 ie9 이하를 지원합니까?
사랑하지


@HunterLarco 감사합니다. 문제는 결과에서 각 줄을 얻는 방법을 모른다는 것입니다. 내 말은 reader.readAsText ()가 한 줄씩 읽을 수있는 대신 모든 데이터를 반환한다는 것을 의미합니다
litaoshen

@LukeMcGregor 요구 사항이 없으며 현재 버전 만 지원하면 괜찮습니다.
litaoshen 2014

답변:


117

jQuery없이 :

document.getElementById('file').onchange = function(){

  var file = this.files[0];

  var reader = new FileReader();
  reader.onload = function(progressEvent){
    // Entire file
    console.log(this.result);

    // By lines
    var lines = this.result.split('\n');
    for(var line = 0; line < lines.length; line++){
      console.log(lines[line]);
    }
  };
  reader.readAsText(file);
};

HTML :

<input type="file" name="file" id="file">

파일 필드가 렌더링 된 후 자바 스크립트 코드를 넣어야합니다.


21
나는 200000 줄이 있습니다 (농담이 아니라 로그 파일입니다). 나는 당신의 솔루션이 그것을 다루지 않는다고 생각합니다.
토마스 Zato - 분석 재개 모니카

또한이 솔루션은 반환 (줄 바꿈)이 인용 된 필드 내에있는 경우 처리하지 않습니다. Tomas의 경우 고급 브라우저를 사용하는 경우 생성기를 사용하여 "분할"하지 않고 한 줄씩 읽을 수 있습니다.
Rahly

5
줄을 사용하는 외부 파일의 경로는 어디에 있습니까?
abidinberkay

@ TomášZato 광산은 100m 라인입니다. 나는 아직 그 대답을 테스트하지 않았습니다. 어떻게 접근 했습니까? 예제에 대한 링크는 매우 감사하겠습니다! huanPastas, 답변 +1!
gsamaras

2
@gsamaras 정확히 기억이 나지 않지만 데이터를 하나씩 읽는 스트림을 사용하고 만날 때마다 이벤트를 내보냈습니다 \n. 그러나 100m 줄을 사용하면 HTML로 표시하는 테이블이 표시됩니다.
토마스 Zato - 분석 재개 모니카

37

ES6를 사용하면 자바 스크립트가 조금 더 깨끗해집니다.

handleFiles(input) {

    const file = input.target.files[0];
    const reader = new FileReader();

    reader.onload = (event) => {
        const file = event.target.result;
        const allLines = file.split(/\r\n|\n/);
        // Reading line by line
        allLines.forEach((line) => {
            console.log(line);
        });
    };

    reader.onerror = (event) => {
        alert(event.target.error.name);
    };

    reader.readAsText(file);
}

3
그것을하는 올바른 방법 인 regex로 분할 라인에 투표했습니다.
Meysam Feghhi

13
더 간단한 정규 표현식 :\r?\n
ceving

1
훌륭한 예이며 Windows 및 Unix 스타일의 줄 끝이 처리되는 것을 좋아합니다. 감사합니다.
Brad
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.