Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
954ebdd034
commit
3f35212779
120
js/dos/ext/vis/examples/graph3d/playground/csv2array.js
Normal file
120
js/dos/ext/vis/examples/graph3d/playground/csv2array.js
Normal file
|
@ -0,0 +1,120 @@
|
|||
/**
|
||||
* Convert data in CSV (comma separated value) format to a javascript array.
|
||||
*
|
||||
* Values are separated by a comma, or by a custom one character delimeter.
|
||||
* Rows are separated by a new-line character.
|
||||
*
|
||||
* Leading and trailing spaces and tabs are ignored.
|
||||
* Values may optionally be enclosed by double quotes.
|
||||
* Values containing a special character (comma's, double-quotes, or new-lines)
|
||||
* must be enclosed by double-quotes.
|
||||
* Embedded double-quotes must be represented by a pair of consecutive
|
||||
* double-quotes.
|
||||
*
|
||||
* Example usage:
|
||||
* var csv = '"x", "y", "z"\n12.3, 2.3, 8.7\n4.5, 1.2, -5.6\n';
|
||||
* var array = csv2array(csv);
|
||||
*
|
||||
* Author: Jos de Jong, 2010
|
||||
*
|
||||
* @param {string} data The data in CSV format.
|
||||
* @param {string} delimeter [optional] a custom delimeter. Comma ',' by default
|
||||
* The Delimeter must be a single character.
|
||||
* @return {Array} array A two dimensional array containing the data
|
||||
* @throw {String} error The method throws an error when there is an
|
||||
* error in the provided data.
|
||||
*/
|
||||
function csv2array(data, delimeter) {
|
||||
// Retrieve the delimeter
|
||||
if (delimeter == undefined)
|
||||
delimeter = ',';
|
||||
if (delimeter && delimeter.length > 1)
|
||||
delimeter = ',';
|
||||
|
||||
// initialize variables
|
||||
var newline = '\n';
|
||||
var eof = '';
|
||||
var i = 0;
|
||||
var c = data.charAt(i);
|
||||
var row = 0;
|
||||
var col = 0;
|
||||
var array = new Array();
|
||||
|
||||
while (c != eof) {
|
||||
// skip whitespaces
|
||||
while (c == ' ' || c == '\t' || c == '\r') {
|
||||
c = data.charAt(++i); // read next char
|
||||
}
|
||||
|
||||
// get value
|
||||
var value = "";
|
||||
if (c == '\"') {
|
||||
// value enclosed by double-quotes
|
||||
c = data.charAt(++i);
|
||||
|
||||
do {
|
||||
if (c != '\"') {
|
||||
// read a regular character and go to the next character
|
||||
value += c;
|
||||
c = data.charAt(++i);
|
||||
}
|
||||
|
||||
if (c == '\"') {
|
||||
// check for escaped double-quote
|
||||
var cnext = data.charAt(i+1);
|
||||
if (cnext == '\"') {
|
||||
// this is an escaped double-quote.
|
||||
// Add a double-quote to the value, and move two characters ahead.
|
||||
value += '\"';
|
||||
i += 2;
|
||||
c = data.charAt(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
while (c != eof && c != '\"');
|
||||
|
||||
if (c == eof) {
|
||||
throw "Unexpected end of data, double-quote expected";
|
||||
}
|
||||
|
||||
c = data.charAt(++i);
|
||||
}
|
||||
else {
|
||||
// value without quotes
|
||||
while (c != eof && c != delimeter && c!= newline && c != ' ' && c != '\t' && c != '\r') {
|
||||
value += c;
|
||||
c = data.charAt(++i);
|
||||
}
|
||||
}
|
||||
|
||||
// add the value to the array
|
||||
if (array.length <= row)
|
||||
array.push(new Array());
|
||||
array[row].push(value);
|
||||
|
||||
// skip whitespaces
|
||||
while (c == ' ' || c == '\t' || c == '\r') {
|
||||
c = data.charAt(++i);
|
||||
}
|
||||
|
||||
// go to the next row or column
|
||||
if (c == delimeter) {
|
||||
// to the next column
|
||||
col++;
|
||||
}
|
||||
else if (c == newline) {
|
||||
// to the next row
|
||||
col = 0;
|
||||
row++;
|
||||
}
|
||||
else if (c != eof) {
|
||||
// unexpected character
|
||||
throw "Delimiter expected after character " + i;
|
||||
}
|
||||
|
||||
// go to the next character
|
||||
c = data.charAt(++i);
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
Loading…
Reference in New Issue
Block a user