My CSV data looks like this:
JavaScript
x
5
1
heading1,heading2,heading3,heading4,heading5
2
value1_1,value2_1,value3_1,value4_1,value5_1
3
value1_2,value2_2,value3_2,value4_2,value5_2
4
5
How do you read this data and convert to an array like this using JavaScript?:
JavaScript
1
15
15
1
[
2
heading1: value1_1,
3
heading2: value2_1,
4
heading3: value3_1,
5
heading4: value4_1
6
heading5: value5_1
7
],[
8
heading1: value1_2,
9
heading2: value2_2,
10
heading3: value3_2,
11
heading4: value4_2,
12
heading5: value5_2
13
]
14
.
15
I’ve tried this code but no luck!:
JavaScript
1
18
18
1
<script type="text/javascript">
2
var allText =[];
3
var allTextLines = [];
4
var Lines = [];
5
6
var txtFile = new XMLHttpRequest();
7
txtFile.open("GET", "file://d:/data.txt", true);
8
txtFile.onreadystatechange = function()
9
{
10
allText = txtFile.responseText;
11
allTextLines = allText.split(/rn|n/);
12
};
13
14
document.write(allTextLines);
15
document.write(allText);
16
document.write(txtFile);
17
</script>
18
Advertisement
Answer
NOTE: I concocted this solution before I was reminded about all the “special cases” that can occur in a valid CSV file, like escaped quotes. I’m leaving my answer for those who want something quick and dirty, but I recommend Evan’s answer for accuracy.
This code will work when your data.txt
file is one long string of comma-separated entries, with no newlines:
data.txt:
JavaScript
1
2
1
heading1,heading2,heading3,heading4,heading5,value1_1, ,value5_2
2
javascript:
JavaScript
1
26
26
1
$(document).ready(function() {
2
$.ajax({
3
type: "GET",
4
url: "data.txt",
5
dataType: "text",
6
success: function(data) {processData(data);}
7
});
8
});
9
10
function processData(allText) {
11
var record_num = 5; // or however many elements there are in each row
12
var allTextLines = allText.split(/rn|n/);
13
var entries = allTextLines[0].split(',');
14
var lines = [];
15
16
var headings = entries.splice(0,record_num);
17
while (entries.length>0) {
18
var tarr = [];
19
for (var j=0; j<record_num; j++) {
20
tarr.push(headings[j]+":"+entries.shift());
21
}
22
lines.push(tarr);
23
}
24
// alert(lines);
25
}
26
The following code will work on a “true” CSV file with linebreaks between each set of records:
data.txt:
JavaScript
1
4
1
heading1,heading2,heading3,heading4,heading5
2
value1_1,value2_1,value3_1,value4_1,value5_1
3
value1_2,value2_2,value3_2,value4_2,value5_2
4
javascript:
JavaScript
1
28
28
1
$(document).ready(function() {
2
$.ajax({
3
type: "GET",
4
url: "data.txt",
5
dataType: "text",
6
success: function(data) {processData(data);}
7
});
8
});
9
10
function processData(allText) {
11
var allTextLines = allText.split(/rn|n/);
12
var headers = allTextLines[0].split(',');
13
var lines = [];
14
15
for (var i=1; i<allTextLines.length; i++) {
16
var data = allTextLines[i].split(',');
17
if (data.length == headers.length) {
18
19
var tarr = [];
20
for (var j=0; j<headers.length; j++) {
21
tarr.push(headers[j]+":"+data[j]);
22
}
23
lines.push(tarr);
24
}
25
}
26
// alert(lines);
27
}
28