2016-06-20 2 views
2

로컬 디렉토리의 일부 데이터를 구문 분석하려고합니다. 나는 그것을하기 위해 파파 파서를 사용한다. 문제는 텍스트 파일을 변수에 할당 할 수 없다는 것입니다. 이 오류가 발생합니다.Javascript에서 텍스트 데이터를 구문 분석하는 중 오류가 발생했습니다.

Uncaught TypeError : 'FileReader'에서 'readAsText'를 실행하지 못했습니다. 매개 변수 1의 유형이 'Blob'이 아닙니다.

나는 그것에 대해 조사한 결과, HTML 파일 판독기로 파일을 읽을 때 매우 일반적인 오류라는 것을 알았습니다.

내 코드는; x = document.getElementsByName("datafile")[0]

  • Papa.parse 첫 번째 인자는 문자열이 될 것으로 기대 :

    <!doctype html> 
     
    <html class="no-js" lang=""> 
     
        <head> 
     
         <script src="https://github.com/mholt/PapaParse/blob/master/papaparse.js"></script> 
     
         <meta charset="utf-8"> 
     
         <meta http-equiv="x-ua-compatible" content="ie=edge"> 
     
         <title>Parse Example</title> 
     
         <meta name="description" content=""> 
     
         <meta name="viewport" content="width=device-width, initial-scale=1"> 
     
         <link rel="stylesheet" href="css/normalize.css"> 
     
         <link rel="stylesheet" href="css/main.css"> 
     
         <script src="js/vendor/modernizr-2.8.3.min.js"></script> 
     
        </head> 
     
        <p>Click the button to Upload .</p> 
     
        <button onclick="myFunction()" type="INPUT">Load</button> 
     
        <input type="file" name="datafile" size="40"> 
     
        <script> 
     
         var x; 
     
         var config = { 
     
          delimiter: "", \t // auto-detect 
     
          newline: "", \t // auto-detect 
     
          header: true, 
     
          dynamicTyping: false, 
     
          preview: 0, 
     
          encoding: "", 
     
          worker: false, 
     
          comments: false, 
     
          step: undefined, 
     
          complete: undefined, 
     
          error: undefined, 
     
          download: true, 
     
          skipEmptyLines: false, 
     
          chunk: undefined, 
     
          fastMode: undefined, 
     
          beforeFirstChunk: undefined, 
     
          withCredentials: undefined 
     
         }; 
     
         function myFunction() { 
     
          x = document.getElementsByName("datafile"); 
     
          myfile = Papa.parse(x, config); 
     
          document.getElementById("demo").innerHTML = myfile; 
     
         } 
     
        </script> 
     
        <p id="demo"></p> 
     
        </body> 
     
    </html>

  • 답변

    3
    1. getElementsByName 반환은 항상 기본적으로 당신은 단지 첫 번째를 선택할 수 있습니다, 일치하는 요소의 노드 목록 컬렉션을 반환 또는 File 개체. File 오브젝트는 FileList에서 얻을 수 있으며, 이는 files 파일 입력의 특성에 저장됩니다. 그래서 기본적으로 (파일이 입력 선택한 경우 작동한다) : Papa.parse 아무것도 자체를 반환하지 않습니다 말한다 x = document.getElementsByName("datafile")[0].files[0]

    2. documentaion, 당신은 데이터를 얻을 수있는 콜백을 제공해야한다. 당신이

      complete: function(data) { 
          console.log(data); 
      } 
      

      처럼 뭔가 config 객체에 complete: undefined를 교체 할 경우 그래서 당신은 당신의 데이터는 브라우저 콘솔에 표시거야.

    +0

    처음에는 긴 문서가 있으면 어떻게됩니까? 각 줄을 가져 오기 위해 for 루프가 필요한가요? – bukowski

    +0

    질문을받지 못했습니다. 설명해 주시겠습니까? – cyberskunk

    +0

    코드가 작동했습니다. 그러나 내가 원하는 방식은 아닙니다. 나는 어떤 오류도없고 나의 자료는뿐만 아니라 읽히지 않는다. 데이터를 읽은 후에 빈 배열 같은 객체를 얻는다. 나는 선 구조 때문에 그것을 묻는거야? 예를 들어 루프를 다음과 같이 작성해야합니다. i = 0 ~ line_lenght line (i) = x = document.getElementsByName ("datafile") [i] .files [i] – bukowski

    관련 문제