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

新手上路,请多包涵

我的 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
...

你如何读取这些数据并使用 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);
    document.write(allText);
    document.write(txtFile);
</script>

原文由 Mahesh Thumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 801
1 个回答

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


当您的 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/

原文由 Blazemonger 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题