2016-07-04 5 views
0

にテキストファイルを読みますが、何らかの理由で、私のアプリケーションにはグラフィカルなバグがありました。のXMLHttpRequest:私はそれを使用したとき、私は数字でテキストファイルを読み込み、XMHLHttpRequest</p>私はすでに<a href="https://developer.mozilla.org/en-US/docs/Web/API/FileReader" rel="nofollow">FileReader API</a>使用しました <p>で行列に入れたい行列

私の考えは、テキストファイル上の数字を取得し、Babylon.jsで使用することで、キャンバスにポイントをプロットすることができます。

ファイルの例:

NUM_GRUPOS 1 
[GRUPO] 
TAM 64 
[PONTOS] 
ROTULO 1 
2.50000000000000E+0002 -2.00000000000000E+0002 2.00000000000000E+0001 0.00000000000000E+0000 0.00000000000000E+0000 1.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 
ROTULO 2 
3.54000000000000E+0002 -2.52000000000000E+0002 3.90000000000000E+0002 1.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 0.00000000000000E+0000 
... //A bunch of other numbers 
[ARESTAS] 
TAM 60 
2.50000000000000E+0002-2.00000000000000E+0002 2.00000000000000E+0001 3.09941176470588E+0002-1.59941176470588E+0002 8.58823529411765E+0001 0.00000000000000E+0000 0.00000000000000E+0000 1.00000000000000E+0000 

Complete example

私はすべてのこれらの最初の行をスキップし、[ARESTAS]キーワードまたはTAMキーワードから読み始めると入れたいですnはキーワードの後の行の数です。

最初の6つの数字キャンバスに、最後の三つは、物体色

を表し、これは私がFileReaderのとやったことである(Z、X、Y)座標を表し:

var matrix = []; 
var keyWord = '[ARESTAS]'; 
if (window.File && window.FileReader && window.FileList && window.Blob) { 
    function readSingleFile(evt) { 
     var f = evt.target.files[0]; 

     if (f) { 
      var r = new FileReader(); 
      var contents = 'empty'; 
      r.onload = function(e) { 
       contents = e.target.result; 
       var pastKey = false; 
       contents.split('\n').forEach(function(line, i) { 
        if (pastKey) { 
        var vals = line.trim().split(' '); 
        if (vals.length > 2) { 
         matrix.push(vals); 
        } 

        } 
        if (line.trim() === keyWord) { 
        pastKey = true; 
        } 

       }) 
      } 
     r.readAsText(f); 
     } else { 
      alert("Failed"); 
     } 
    } 

    document.getElementById('fileinput').addEventListener('change', readSingleFile, false); 
} else { 
    alert('The File APIs are not fully supported by your browser.'); 
} 

答えて

0

なぜ反復線?

 r.onload = function(e) { 
      contents = e.target.result; 
      var pos = contents.indexOf(keyWord) + keyWord.length; //find [ARESTAS] portion 
      var numbers = contents.substr(pos).trim(); //trim it from rest of file 
      matrix = numbers.split('\n') // get separate lines 
       .map(function (e) { 
        return e.split(' '); // split them by whitespace 
       }) 
       .filter(function (e) { 
        return e.length > 2; // filter all unwanted lines 
       }) 
     } 

...かさえ:

function readMatrix(url, callback) { 
     var xhr = new XMLHttpRequest(); 
     xhr.open("GET", url); 
     xhr.onload = function(e) { 
      var contents = e.target.result; 
      var pos = contents.indexOf(keyWord) + keyWord.length; //find [ARESTAS] portion 

      var matrix = contents 
       .substr(pos) // get arestas section 
       .trim(); //trim redundant whitespace 
       .split('\n') // get separate lines 
       .slice(1) // skip TAM ### line 
       .map(function (e) { 
        return e.split(' '); // split separate lines by whitespace 
       }); // get final matrix 

      callback(matrix); // pass received data to callback 
     } 
     xhr.send(); 
    } 

    document.getElementById('fileinput') 
     .addEventListener('change', function() { 

      var url = ... address of file 

      ... 

      readMatrix(function (matrix) { 

       // we got filled matrix here 

      }); 
     }, false); 
+0

開始点としてこれを試すことができます。それぞれのソリューションで何をしているのかを説明するか、機能的なデモを提供することができますか? – brunex92

0

は私のJavaScriptの知識がちょっと悪い

var start = contents.indexOf('[ARESTAS]'); 
    // get rid of all before ARESTAS, then split and remove first 2 rows 
    var txtArr = txt.slice(start).split('\r\n').splice(2); 
    //trim and split each line at space and map to array of numbers 
    var numArr = txtArr.reduce(function(a, c){ 
     a.push(c.trim().split(' ').map(Number)) 
     return a 
    },[]) 

DEMO

+0

これはかなりうまくいきますが、私の場合、テキストファイルをURLからロードするか、コンピュータ上のファイルを選択する必要があります。 – brunex92

+0

あなたが好きな方法でファイルをロードすることを理解していれば、私のコンピュータ上のローカルファイルからではありません。私は配列に変換する方法を示していました。しかし、あなたが私のデモを見るとURLからもロードされています(左のdata.txt) – charlietfl

+0

同じコードを使ってみましたが、このエラーが返されます: 構文エラーTestCluster.s3d:1:1 構文エラーインデックス.html:1:1 このtestcluster.s3dは私のテキストファイルです。コンソールにアレイを表示しようとすると、空であることがわかります – brunex92

関連する問題

 関連する問題