【问题标题】:read cells content of dataobject读取数据对象的单元格内容
【发布时间】:2017-04-24 17:16:11
【问题描述】:

我使用 javascript 代码读取了一个 csv 文件,我想将其推送到一个二维数组中以进行一些处理

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>

但它没有显示任何内容。 有人可以帮忙吗?

【问题讨论】:

    标签: javascript arrays csv data-objects


    【解决方案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 数据强制转换为字符串进行处理。 您的问题没有显示这两项:

    1. 您如何设置 var 数据
    2. 您如何调用 parseCSV(dataArray)

    如果这两件事都存在,那么一切都应该有效 - Here's the proof


    至于 html 脚本部分:

    您的数组寻址看起来错误 - 看起来应该是这样的:

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

    这是我的推理

    我了解到您正在将 CSV 数据传递给此函数,以便将其解析为您的 dataArray 变量 - 对吗?

    如果正确,这些数据看起来就像我手动添加的(我直接添加它只是为了处理某些东西)。

    更大的项目不是数据来自哪里,而是最终由这个 parseCSV 函数解析。

    发生这种情况时,您将通过以下方式构建附加到空的 dataArray 变量:

    对于第一遍,这将如下所示:

    [{"date" : "日期", "T4" : "T4 标签"}]

    第二遍:

    [{"date" : "Date", "T4" : "T4 Tag"}, {"date" : "20170424", "T4" : "请工作。"}]

    第三遍:

    [{"date" : "Date", "T4" : "T4 Tag"}, {"date" : "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";
    

    希望这足以解释清楚。

    【讨论】:

    • 我调用了一个加载 csv 函数,在该函数中我调用了 parsecsv
    • @S.ElBahloul,我想我找到了罪魁祸首,请参阅我的答案的附加部分和This updated link
    • 它没有显示任何东西。我不应该在页面中定义数据,因为我的应用程序浏览 csv 文件数据,我尝试将单元格内容显示为测试,因此我可以使用 for 循环对某些参数进行一些处理
    【解决方案2】:

    这里是加载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);
            }
    

    【讨论】:

    • 您希望在这里发生什么?您是否希望 parseCSV 在解析 CSV 后与您的服务器端响应数据一起运行?是这样,我希望这也是空的,因为您没有将 request.responseText 传递给 parseCSV - 就像 parseCSV(request.responseText) 一样。此外,您还应该在发送之前检查您的就绪状态。
    • 这里还有一个更大的问题,它与变量名的范围有关。在您的 javascript 文件中,您将 dataArray 作为一个空数组调用,并且您没有定义 data 是什么。但是,您尝试使用 dataArray 作为此函数的输入参数。由于它存在于函数之外,因此无需您将其用作参数即可访问该函数。您正在尝试通过 ajax 响应实例化此函数,而不是传递响应数据,而是传递一个空数组,然后尝试从 data 填充此数组。
    • 我不太明白你的解释。我想要的只是读取 csv 文件,将数据放入 2D 数组中,以便我可以进行一些处理。例如。第二列是 T4 和 i 从 0 到 rows.length 是 T4 的值。如果 T4 在 30 秒内超过 >750(第 0 列是时间),则存在问题。你明白我的意思吗?你能给我一个正确的代码吗??
    • 这将取决于 request.responseText 返回的内容。这是一个字符串化的 JSON 对象,还是类似于我在答案中硬编码到 data 变量中的字符串?
    • 你想要的只是让我处理的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 2011-07-03
    相关资源
    最近更新 更多