背景:我已经在手机上下载并存储了一些文件。我想一个接一个地检索这些文件并单独解析它们。解析的结果用于进一步计算。
问题:未正确提取文件。因此解析也没有正确发生。我到目前为止的代码:
var knownFiles=[];
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0,
function(fs){
fs.root.getDirectory('Amazedata', null,
function(d){
var dirReader = d.createReader();
dirReader.readEntries(function(entries){
if (!entries.length) {
alert('FileSystem is Empty');
}
else{
for(var i=0; i<entries.length;i++){
knownFiles.push(entries[i].name);
var file = entries[i].fullPath;
//console.log(file);
Papa.parse(file,{
header: true,
dynamicTyping: true,
complete: function(){
var totAmt =0;
for(var i=1;i<=arguments[0].data.length;i++){
if(!arguments[0].data[1][2]){
totAmt += arguments[0].data[i][28];
}
}
var payerObj={
'PayerAccountID' : arguments[0].data[1][1],
'PayerAccountName' : arguments[0].data[1][8],
'TotalAmount' : totAmt
};
payerAccArr.push(payerObj);
$('#loading1').removeClass('show').addClass('hide');
$('#content-Container').removeClass('hide').addClass('show');
},
error: errorFn
});
}
// for(var i=0;i<knownFiles.length;i++){
// }
}
}, onError);
}, onError );
}, onRequestError);
如何获取解析文件?我错过了什么?我得到的错误是
TypeError: Unable to get reference for 1
我正在使用Papa.parse进行解析。
答案 0 :(得分:0)
我能够使用getFile
和fileEntry.file
方法解决此问题。代码编辑如下:
var knownFiles=[];
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0,
function(fs){
fs.root.getDirectory('Amazedata', null,
function(d){
var dirReader = d.createReader();
dirReader.readEntries(function(entries){
if (!entries.length) {
alert('FileSystem is Empty');
}
else{
var dirLength = entries.length;
for(var i=0; i<entries.length;i++){
knownFiles.push(entries[i].name);
var reqfile = entries[i].fullPath;
d.getFile(reqfile,{},
function(fileEntry){
fileEntry.file(function(file){
Papa.parse(file,{
header: true,
dynamicTyping: true,
complete: function(){
//console.log(arguments);
var parserObj = arguments[0];
var totAmt =0;
for(var j=0; j<parserObj.data.length; j++){
if(!parserObj.data[j].LinkedAccountId){
totAmt += parserObj.data[j].TotalCost ? parseInt(parserObj.data[j].TotalCost) : 0;
}
}
console.log('total amount', totAmt);
var payerObj={
'PayerAccountID' : parserObj.data[0].PayerAccountId,
'PayerAccountName' : parserObj.data[0].PayerAccountName,
'TotalAmount' : totAmt
};
console.log('payerObj',payerObj);
payerAccArr.push(payerObj);
if(payerAccArr.length == dirLength)
break;
},
error: errorFn
});
});
});
//console.log(file);
}
fileEntry.file
返回一个可用于解析的文件Object。