我想阅读带有数字的文本文件,并使用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
这甚至可能吗?
答案 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.');
}