Javascript:将文本文件读入矩阵

时间:2016-04-25 19:21:03

标签: javascript file matrix

我想阅读带有数字的文本文件,并使用JavaScript将它们放入矩阵

我知道如何加载,读取文件,甚至用警报显示内容,但我不知道如何将内容放入矩阵。我一直在使用FileReader API

我的想法是获取数字并使用Babylon.js,这样我就可以在画布上绘制点

另一个问题是我想跳过很多行并开始从一个确切的单词中读取,甚至可以在JavaScript上使用吗?

修改

<input type="file" id="fileinput" />
<script type="text/javascript">
    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;
                    alert( "File loaded:" + f.name + "\n"); 
                    alert(contents); 
                }
            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.');
    }
</script>

阅读完文件后,我想把这些数字写下来:

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

进入矩阵[x] [9],其中x是文件上的行数。

前六个数字表示画布中的坐标(x,y,z),后三个表示对象颜色

编辑2: 来自@NOBrien的请求 该文件基本上是这样的:

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

我想跳过所有这些第一行并开始阅读 [ARESTAS] 关键字,我还需要在 TAM

这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

假设每行数据都在一个新行上,每个数据值用一个空格分隔:

更新的示例仅添加keyword行出现后出现的值。仅记录包含2个以上字段的行。

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.');
}

Codepen:http://codepen.io/nobrien/pen/ONodwO