2017-04-24 55 views
0

我使用JavaScript代碼讀取csv文件的細胞,我想將它推到AA二維數組,以做一些處理閱讀內容數據對象

var dataArray = new Array; 
     function parseCSV(dataArray) { 
      //replace UNIX new lines 
      data = data.replace(/\r\n/g, "\n"); 
      //replace MAC new lines 
      data = data.replace(/\r/g, "\n"); 
      //split into rows 
      var rows = data.split("\n"); 

      // loop through all rows 
      for (var i = 0; i < rows.length; i++) { 
       // this line helps to skip empty rows 
       if (rows[i]) { 
        // our columns are separated by comma 
        var column = rows[i].split(","); 


        var date=column[0]; 
        var value = column[4]; 

        // create object which contains all these items: 
        var dataObject = { 
         date: date, 
         T4: value 
        }; 
        dataArray.push(dataObject); 
       } 
      } 
     } 
     } 

作爲測試,我嘗試讀取小區含量並顯示在網頁上以驗證我是否讀取了該文件。

<script type="text/javascript"> 
     var x= dataArray[1][4]; 
     document.write(x); 
    </script> 

但它沒有顯示任何東西。 任何人都可以幫忙嗎?

回答

1
var dataArray = new Array; 

var data = "Date,Description,Created By,Modified By,T4 Tag\n"; 
data += "20170424,This is record 1,user1,none,Just work please.\n"; 
data += "20170424,This is record 2,user2,none,I'm trying too.\n"; 

function parseCSV(dataArray) { 
    //replace UNIX new lines 
    data = data.replace(/\r\n/g, "\n"); 
    //replace MAC new lines 
    data = data.replace(/\r/g, "\n"); 
    //split into rows 
    var rows = data.split("\n"); 

    // loop through all rows 
    for (var i = 0; i < rows.length; i++) { 
     // this line helps to skip empty rows 
     if (rows[i]) { 
      // our columns are separated by comma 
      var column = rows[i].split(","); 


      var date=column[0]; 
      var value = column[4]; 

      // create object which contains all these items: 
      var dataObject = { 
       date: date, 
       T4: value 
      }; 
      dataArray.push(dataObject); 
     } 
    } 
} 
parseCSV(dataArray); 

由於缺少一個文件,我將一些CSV數據強制轉換爲字符串進行處理。 你的問題沒有顯示這兩個項目:你是如何設定VAR數據

  • 你是如何調用parseCSV(dataArray中)
  • 如果這兩個東西是目前所有

    1. 應該工作 - Here's the proof


      至於HTML腳本部分:

      您的陣列解決長相錯了 - 現在看來似乎應該是這樣的:

      <script> 
          var x = dataArray[1].T4; 
          document.write(x); 
      </script> 
      

      這裏是我的推理

      我明白您將CSV數據傳遞給此函數以將其解析爲您的dataArray變量 - 對嗎?

      如果正確,這些數據看起來像我手動添加的(我直接添加了這個只是爲了處理某些事情)。

      更大的項目不是數據來自哪裏,而是最終它被這個parseCSV函數解析。

      發生這種情況時,你正在建設追加到空dataArray中變量通過以下方式:

      在第一輪,這將如下所示:

      [{「日期」:「日期」, 「T4」: 「T4標記」}]

      對於第二遍:

      [{ 「日期」: 「日期」, 「T4」: 「T4標記」},{ 「日期」: 「20170424」,「T4」:「請工作。」}]

      對於第三關:

      [{ 「日期」: 「日期」, 「T4」: 「T4標籤」},{ 「日期」: 「20170424」, 「T4」:「剛工作請。 「},{」date「:」20170424「,」T4「:」我也在嘗試。「}]

      所以,現在當你在你的HTML代碼節,你有沒有地址的關鍵[4]

      您的代碼表示:

      var x = dataArray[1][4]; 
      

      考慮下面來看看我的意思:

      var record = dataArray[1]; 
      //{"date" : "20170424", "T4" : "Just work please."} 
      //There is no key 4 here only date & T4. 
      var date = record.date;//returns: "20170424" 
      var t4 = record.T4;//returns: "Just work please." 
      

      相反,如果你有牛逼他以下 - 你的方法將工作

      myObj = {"date" : "20170424", "4" : "This is a value for field 4", "T4" : "Just work please."} 
      myObj[4];//returns "This is a value for field 4"; 
      

      希望這可以解釋得很清楚。

    +0

    我所說的負載CSV功能,我稱之爲parsecsv –

    +0

    @ S.ElBahloul,我想我找到了罪魁禍首,請參閱我的回答的附加部分, [此更新的鏈接](https://repl.it/HXkv/1)。 –

    +0

    它沒有顯示任何東西。我不應該在頁面中定義數據,因爲我的應用瀏覽csv文件數據,我嘗試將單元格內容顯示爲測試,因此我可以使用for循環在某些參數上構建一些處理。 –

    0

    這裏是負載CSV文件功能

    function loadCSV(file) { 
          if (window.XMLHttpRequest) { 
           // IE7+, Firefox, Chrome, Opera, Safari 
           var request = new XMLHttpRequest(); 
          } else { 
           // code for IE6, IE5 
           var request = new ActiveXObject('Microsoft.XMLHTTP'); 
          } 
          // load 
          request.open('GET', file, false); 
          request.send(); 
          parseCSV(dataArray); 
         } 
    
    +0

    您期望在此發生什麼?解析CSV後,您是否希望parseCSV與您的服務器端響應數據一起運行?是的,我希望這也是空的,因爲你沒有將request.responseText傳遞給parseCSV--就像parseCSV(request.responseText)一樣。在發送之前,你也應該檢查你的準備狀態。 –

    +0

    這裏還有一個更大的問題,它與您的變量名稱範圍有關。在您的JavaScript文件中,您將** dataArray **作爲空數組調用,並且不定義**數據**。但是,您嘗試使用** dataArray **作爲此函數的輸入參數。它已經可以被該函數訪問,而無需使用這個參數作爲參數,因爲它存在於該函數之外。你試圖通過ajax響應實例化這個函數,而不是通過傳遞響應數據傳遞一個空數組,然後你嘗試從** data **中填充這個數組。 –

    +0

    我不太瞭解你的解釋。所有我想要的是讀取CSV文件,把數據放在二維數組中,這樣我就可以做一些處理。例如。第二列是T4,我從0到rows.length是T4的值。如果T4在30秒內超過> 750(第0列是時間),則存在問題。你明白我的意思嗎?你能給我一個正確的代碼嗎? –