Eso*_*Moa 6 javascript parsing
我必须从文件中读取数据.该数据由服务器按字节顺序写入文件.该文件有一个修复结构,现在我想用JS读取其中的信息.
我找到http://www.html5rocks.com/en/tutorials/file/dndfiles/并将其复制到小提琴:http://jsfiddle.net/egLof4ph/
function readBlob(opt_startByte, opt_stopByte) {
var files = document.getElementById('files').files;
if (!files.length) {
alert('Please select a file!');
return;
}
var file = files[0];
var start = parseInt(opt_startByte) || 0;
var stop = parseInt(opt_stopByte) || file.size - 1;
var reader = new FileReader();
// If we use onloadend, we need to check the readyState.
reader.onloadend = function(evt) {
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
document.getElementById('byte_content').textContent = evt.target.result;
document.getElementById('byte_range').textContent = ['Read bytes: ', start + 1, ' - ', stop + 1,
' of ', file.size, ' byte file'].join('');
}
};
var blob = file.slice(start, stop);
var a = reader.readAsBinaryString(blob);
}
document.querySelector('.readBytesButtons').addEventListener('click', function(evt) {
if (evt.target.tagName.toLowerCase() == 'button') {
var startByte = evt.target.getAttribute('data-startbyte');
var endByte = evt.target.getAttribute('data-endbyte');
readBlob(startByte, endByte);
}
}, false);
Run Code Online (Sandbox Code Playgroud)
我知道前7个字节是垃圾,可以扔掉它们.接下来的68个字节属于一起,每个值都是4字节大.在68Bytes之后,又有68个可用字节到来(68字节是"时隙").
我的问题:当我使用该代码时,我会得到许多符号(A,Q,&&&,特殊字符,......),但数据实际上很长.我怎样才能将它们解析为数字?根据Filereader API,readAsBinarsString()返回原始二进制数据.以及如何正确解析整个文件?
所以,原始文件看起来像这样:
<7B>Metadata</7B><4B>long value</4B>....17times for each timeslot <4B>long value</4B>....17times again.... and this util the end of the file.
Run Code Online (Sandbox Code Playgroud)
当我使用上面的代码时,我得到的输出如下: & &WK
此外我发现:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays(因为FileReader提供了一个返回ArrayBuffer的方法),所以我想我应该使用readAsArrayBuffer(),但是如何用它来获取我的数据?
你真的需要二进制吗?
请注意,根据 W3C 2012 年 7 月 12 日的工作草案,readAsBinaryString 方法现已弃用。
function readBlob(opt_startByte, opt_stopByte) {
var files = document.getElementById('files').files;
if (!files.length) {
alert('Please select a file!');
return;
}
var file = files[0];
var start = parseInt(opt_startByte) || 0;
var stop = parseInt(opt_stopByte) || file.size - 1;
var reader = new FileReader();
reader.onloadend = function (evt) {
if (evt.target.readyState == FileReader.DONE) { // DONE == 2
var a = new Uint8Array(evt.target.result)
var binary = ""
for (var i =0; i <= a.length; i++) {
binary += Number(a[i]).toString(2)
}
document.getElementById('byte_content').textContent = binary;
document.getElementById('byte_range').textContent = ['Read bytes: ', start + 1, ' - ', stop + 1,
' of ', file.size, ' byte file'].join('');
}
};;
var blob = file.slice(start, stop);
var a = reader.readAsArrayBuffer(blob)
}
document.querySelector('.readBytesButtons').addEventListener('click', function (evt) {
if (evt.target.tagName.toLowerCase() == 'button') {
var startByte = evt.target.getAttribute('data-startbyte');
var endByte = evt.target.getAttribute('data-endbyte');
readBlob(startByte, endByte);
}
}, false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
578 次 |
| 最近记录: |