2016-06-20 10 views
2

私は自分のローカルディレクトリからいくつかのデータを解析しようとしています。 私はそれを行うためにパパ・パーサーを使用します。 問題は、テキストファイルを変数に割り当てることができないことです。私はこのエラーが発生しています。Javascriptでテキストデータの解析エラーが発生しましたか?

Uncaught TypeError: 'FileReader'で 'readAsText'を実行できませんでした:パラメータ1の型が 'Blob'ではありません。

私はそれについて調べましたが、HTMLファイルリーダーでファイルを読むときに非常によくあるエラーであることがわかりました。

私のコードは;

<!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リターンはいつも基本的にはあなただけの最初のものを選択することができ、マッチした要素のノードリストのコレクションを返します。x = document.getElementsByName("datafile")[0]

  2. Papa.parseは、最初の引数が文字列であることを期待またはFileオブジェクトです。 Fileオブジェクトは、ファイル入力のfilesプロパティに格納されているFileListから取得できます。だから、基本的には(ファイルが入力に選択されている場合、それは動作するはずです):documentaionとして x = document.getElementsByName("datafile")[0].files[0]

  3. Papa.parseは何でも自分自身を返しません、あなたがデータを取得するためにコールバックを提供しなければならないと言います。あなたは

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

    ようなものでcomplete: undefinedconfigでオブジェクトを交換するのであれば、あなたは、ブラウザのコンソールに表示されるデータを取得します。

+0

これはうまくいきましたが、長いドキュメントを最初に持っているとどうなりますか?各行をフェッチするためにforループが必要ですか? – bukowski

+0

質問には答えられませんでしたか? – cyberskunk

+0

コードが機能しました。しかし、私が望むやり方ではありません。私は何の誤りもなく、私のデータも読み込まれません。私は空の配列のようなオブジェクトをデータ読み込み後に取得します。私はライン構造のためにそれを聞いていますか?例えば、次のようなループを書くべきですか? i = 0〜line_lenght line(i)= x = document.getElementsByName( "datafile")[i] .files [i] – bukowski

関連する問題