2017-04-24 88 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列是时间),则存在问题。你明白我的意思吗?你能给我一个正确的代码吗? –