繁体   English   中英

Javascript:将文本文件读入矩阵

[英]Javascript: Read text file into a 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

放入matrix [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单词后的数字

那有可能吗?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM