2015-07-02 176 views
0

背景:我已經下載並在手機上保存了一些文件。我想要一個接一個地檢索這些文件並分別解析它們。解析的結果用於進一步的計算。無法解析文件

問題:文件沒有正確提取。所以解析也沒有正確發生。我到目前爲止的代碼:

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

當你說「我已經下載並在手機上存儲了一些文件」時,你的意思是你已經將它們下載到瀏覽器的沙盒文件系統中了嗎?總之,你是否理解文件系統API的fie系統不是你實際的文件系統? – apsillers

+0

不是。當我的意思是我已經下載並存儲了文件時,我的意思是我已經提取了服務器上的文件內容,並在這些內容的手機文件夾中創建了相應的文件。我使用了File API的createWriter()方法來創建和寫入文件。 –

回答

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返回可用於解析文件對象。