Convertir des données CSV en tableau JavaScript

Concept et utilisation

La fonction arrayFromSV() permet de convertir un CSV en tableau de données JavaScript ("Array").

Il est possible de spécifier le jeu de données ainsi que les séparateurs de données.

Fonction

arrayFromSV()

Retourne un tableau JavaScript (Array) à partir d'un tableau de données CSV.

Syntaxe
arrayFromSV(donnees, options);
Paramètres
donnees(String)

Le paramètre donnees de la fonction arrayFromSV() définit un tableau de données sous forme de chaine (par exemple, CSV) à convertir en tableau de données JavaScript.

options(Object)

Le paramètre options de la fonction arrayFromSV() définit les séparateurs de données.

Propriétés
lineDelimiter(String)

La propriété lineDelimiter du paramètre options définit la chaine de caractères servant de séparateur de lignes dans les données.
Si cette propriété est omise, la valeur par défaut "\n" sera utilisée.

columnDelimiter(String)

La propriété columnDelimiter du paramètre options définit la chaine de caractères servant de séparateur de colonnes dans les données.
Si cette propriété est omise, la valeur par défaut ";" sera utilisée.

columnQuote(String)

La propriété columnQuote du paramètre options définit les caractères de citation avant et après une valeur contenant les caractères utilisés pour les séparateurs de données.
Si cette propriété est omise, la valeur par défaut "'" sera utilisée.

Exemple de conversion d'un tableau CSV en tableau JavaScript

var donnees = `Ligne 1, colonne 1;Ligne 1, colonne 2
Ligne 2, colonne 1;Ligne 2, colonne 2`;

var options = {
  lineDelimiter: '\n',
  columnDelimiter: ';',
  columnQuote: "'"
};

arrayFromSV(donnees, options);

// renvoie : [
//   ['Ligne 1, colonne 1', 'Ligne 1, colonne 2'],
//   ['Ligne 2, colonne 1', 'Ligne 2, colonne 2']
// ]

Code source de la fonction

function arrayFromSV(a, b) {
  b = b || {};
  var c = b.columnDelimiter || ',',
      d = b.columnQuote || "'",
      e = a.split(b.lineDelimiter || '\n'),
      f = e[0].split(c),
      g = f.length,
      h = [];
  e.map(function(i) {
    var j = false,
        k = [],
        l = [],
        m = 0;
    i.split('').forEach(function (n) {
      if (n === d) {
        j = !j;
      } else {
        if (n === c && !j) {
          l.push(k.join(''));
          k = [];
          m++;
          if (m === g) {
            m = 0;
          }
        } else {
          k.push(n);
        }
      }
    });
    l.push(k.join(''));
    h.push(l);
  });
  return h;
}
^