小编典典

如何使用 javascript 从 *.CSV 文件中读取数据?

all

我的 csv 数据如下所示:

标题1,标题2,标题3,标题4,标题5,value1_1,value2_1,value3_1,value4_1,value5_1,value1_2,value2_2,value3_2,value4_2,value5_2....

你如何读取这些数据并使用 Javascript 转换为这样的数组?:

[heading1:value1_1,heading2:value2_1,heading3:value3_1,heading4:value4_1,heading5:value5_1],[heading1:value1_2,heading2:value2_2,heading3:value3_2,heading4:value4_2,heading5:value5_2]....

我试过这段代码,但没有运气!:

<script type="text/javascript">
    var allText =[];
    var allTextLines = [];
    var Lines = [];

    var txtFile = new XMLHttpRequest();
    txtFile.open("GET", "file://d:/data.txt", true);
    txtFile.onreadystatechange = function()
    {
        allText = txtFile.responseText;
        allTextLines = allText.split(/\r\n|\n/);
    };

    document.write(allTextLines);<br>
    document.write(allText);<br>
    document.write(txtFile);<br>
</script>

阅读 72

收藏
2022-06-02

共1个答案

小编典典

注意: 在提醒我有效 CSV
文件中可能出现的所有“特殊情况”(如转义引号)之前,我编写了此解决方案。我将把我的答案留给那些想要快速和肮脏的人,但我推荐答案以确保准确性

不用自己写…

jQuery-CSV库有一个称为$.csv.toObjects(csv)自动映射的函数。

注意:该库旨在处理任何符合RFC 4180的 CSV 数据,包括大多数“简单”解决方案忽略的所有令人讨厌的边缘情况。

就像@Blazemonger 已经说过的那样,首先您需要添加换行符以使数据有效 CSV。

使用以下数据集:

heading1,heading2,heading3,heading4,heading5
value1_1,value2_1,value3_1,value4_1,value5_1
value1_2,value2_2,value3_2,value4_2,value5_2

使用代码:

var data = $.csv.toObjects(csv):

保存在“数据”中的输出将是:

[
  { heading1:"value1_1",heading2:"value2_1",heading3:"value3_1",heading4:"value4_1",heading5:"value5_1" } 
  { heading1:"value1_2",heading2:"value2_2",heading3:"value3_2",heading4:"value4_2",heading5:"value5_2" }
]

注意:从技术上讲,您编写键值映射的方式是无效的 JavaScript。包含键值对的对象应该用括号括起来。

如果您想自己尝试一下,我建议您查看“toObjects()”选项卡下的基本用法演示。

免责声明:我是 jQuery-CSV 的原作者。

更新:

编辑为使用操作提供的数据集,并包含指向演示的链接,可以在其中测试数据的有效性。

更新2:

由于谷歌代码的关闭。jquery-csv 已移至 GitHub


data.txt当您的文件是一长串以逗号分隔的条目且没有换行符时,此代码将起作用:

数据.txt:

 heading1,heading2,heading3,heading4,heading5,value1_1,...,value5_2

javascript:

$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "data.txt",
        dataType: "text",
        success: function(data) {processData(data);}
     });
});

function processData(allText) {
    var record_num = 5;  // or however many elements there are in each row
    var allTextLines = allText.split(/\r\n|\n/);
    var entries = allTextLines[0].split(',');
    var lines = [];

    var headings = entries.splice(0,record_num);
    while (entries.length>0) {
        var tarr = [];
        for (var j=0; j<record_num; j++) {
            tarr.push(headings[j]+":"+entries.shift());
        }
        lines.push(tarr);
    }
    // alert(lines);
}

以下代码适用于每组记录之间带有换行符的“真实”CSV 文件:

数据.txt:

heading1,heading2,heading3,heading4,heading5
value1_1,value2_1,value3_1,value4_1,value5_1
value1_2,value2_2,value3_2,value4_2,value5_2

javascript:

$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "data.txt",
        dataType: "text",
        success: function(data) {processData(data);}
     });
});

function processData(allText) {
    var allTextLines = allText.split(/\r\n|\n/);
    var headers = allTextLines[0].split(',');
    var lines = [];

    for (var i=1; i<allTextLines.length; i++) {
        var data = allTextLines[i].split(',');
        if (data.length == headers.length) {

            var tarr = [];
            for (var j=0; j<headers.length; j++) {
                tarr.push(headers[j]+":"+data[j]);
            }
            lines.push(tarr);
        }
    }
    // alert(lines);
}

http://jsfiddle.net/mblase75/dcqxr/

2022-06-02