Quelqu'un a-t-il une idée où je pourrais trouver du code javascript pour analyser des données CSV ?
Réponses
Trop de publicités?Vous pouvez utiliser la fonction de CSVToArray() mentionnée dans cette entrée de blog.
Je pense que je peux suffisamment battre le Kirtan réponse
Entrez jQuery-CSV
C'est un plugin jquery conçu pour fonctionner comme une solution pour l'analyse de CSV en Javascript données. Il gère tout seul bord de cas présentées dans la norme RFC 4180, ainsi que des pop-up pour Excel/Google Spreadsheed exportations (c'est à dire la plupart impliquant des valeurs null) que la spec est manquant.
Exemple:
piste,artiste,album,année
Dangereux,'Busta Rhymes','En Cas De Catastrophe',1997
// calling this
music = $.csv.toArrays(csv)
// outputs...
[
["track","artist","album","year"],
["Dangerous","Busta Rhymes","When Disaster Strikes","1997"]
]
console.log(music[1][2]) // outputs: 'When Disaster Strikes'
Mise à jour:
Oh ouais, je devrais probablement mentionner que c'est complètement configurable.
music = $.csv.toArrays(csv, {
delimiter:"'", // sets a custom value delimiter character
separator:';', // sets a custom field separator character
});
Mise à jour 2:
Il travaille maintenant avec jQuery sur Node.js trop. Ainsi, vous avez la possibilité de faire soit du côté client ou côté serveur d'analyse avec la même lib.
Avertissement: je suis aussi l'auteur de jQuery-CSV.
Voici un analyseur CSV simplissime que poignées cité champs par des virgules, nouvelles lignes et s’est échappé de guillemets doubles. Il n’y a aucun fractionnement ou RegEx. Il recherche dans la chaîne d’entrée 1-2 caractères à la fois et génère un tableau.
Tester à http://jsfiddle.net/vHKYH/.
J'ai une mise en œuvre dans le cadre d'un projet de feuille de calcul.
Ce code n'est pas encore testé à fond, mais tout le monde est bienvenue pour l'utiliser.
Comme certaines des réponses de noter que, vos mise en œuvre peut être beaucoup plus simple si vous avez réellement DSV ou TSV fichier, comme ils interdire l'utilisation de l'enregistrement et des séparateurs de champ dans les valeurs. CSV, sur l'autre main peut effectivement avoir des virgules et des retours à la ligne à l'intérieur d'un champ, ce qui rompt la plupart des regex et diviser les approches fondées.
var CSV = {
parse: function(csv, reviver) {
reviver = reviver || function(r, c, v) { return v; };
var chars = csv.split(''), c = 0, cc = chars.length, start, end, table = [], row;
while (c < cc) {
table.push(row = []);
while (c < cc && '\r' !== chars[c] && '\n' !== chars[c]) {
start = end = c;
if ('"' === chars[c]){
start = end = ++c;
while (c < cc) {
if ('"' === chars[c]) {
if ('"' !== chars[c+1]) { break; }
else { chars[++c] = ''; } // unescape ""
}
end = ++c;
}
if ('"' === chars[c]) { ++c; }
while (c < cc && '\r' !== chars[c] && '\n' !== chars[c] && ',' !== chars[c]) { ++c; }
} else {
while (c < cc && '\r' !== chars[c] && '\n' !== chars[c] && ',' !== chars[c]) { end = ++c; }
}
row.push(reviver(table.length-1, row.length, chars.slice(start, end).join('')));
if (',' === chars[c]) { ++c; }
}
if ('\r' === chars[c]) { ++c; }
if ('\n' === chars[c]) { ++c; }
}
return table;
},
stringify: function(table, replacer) {
replacer = replacer || function(r, c, v) { return v; };
var csv = '', c, cc, r, rr = table.length, cell;
for (r = 0; r < rr; ++r) {
if (r) { csv += '\r\n'; }
for (c = 0, cc = table[r].length; c < cc; ++c) {
if (c) { csv += ','; }
cell = replacer(r, c, table[r][c]);
if (/[,\r\n"]/.test(cell)) { cell = '"' + cell.replace(/"/g, '""') + '"'; }
csv += (cell || 0 === cell) ? cell : '';
}
}
return csv;
}
};
Voici mon PEG(.js) grammaire qui semble faire ok à la norme RFC 4180 (c'est à dire qu'il gère les exemples à http://en.wikipedia.org/wiki/Comma-separated_values):
start
= [\n\r]* first:line rest:([\n\r]+ data:line { return data; })* [\n\r]* { rest.unshift(first); return rest; }
line
= first:field rest:("," text:field { return text; })*
& { return !!first || rest.length; } // ignore blank lines
{ rest.unshift(first); return rest; }
field
= '"' text:char* '"' { return text.join(''); }
/ text:[^\n\r,]* { return text.join(''); }
char
= '"' '"' { return '"'; }
/ [^"]
Essayez-le à l' http://jsfiddle.net/knvzk/10 ou http://pegjs.majda.cz/online. Télécharger l'analyseur généré à https://gist.github.com/3362830.