无法获取解析文件

时间:2015-07-02 15:33:00

标签: javascript file parsing papaparse

背景:我已经在手机上下载并存储了一些文件。我想一个接一个地检索这些文件并单独解析它们。解析的结果用于进一步计算。

问题:未正确提取文件。因此解析也没有正确发生。我到目前为止的代码:

 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进行解析。

1 个答案:

答案 0 :(得分:0)

我能够使用getFilefileEntry.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。