Imaginez un fichier texte dans lequel chaque enregistrement csv peut avoir différents nombres de champs. La tâche consiste à écrire du code pour afficher le nombre de champs dans chaque enregistrement du fichier. Vous pouvez supposer qu'il n'y a pas de ligne d'en-tête dans le fichier et pouvez lire à partir d'un fichier ou d'une entrée standard, comme vous le souhaitez.
Vous pouvez supposer une version de rfc4180 pour les règles csv que j'expliquerai ci-dessous pour la définition de chaque ligne du fichier. Voici une version légèrement modifiée de la partie pertinente de la spécification:
Définition du format CSV
Chaque enregistrement est situé sur une ligne distincte, délimitée par un saut de ligne (CRLF). Par exemple:
aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF
Le dernier enregistrement du fichier peut ou non avoir un saut de ligne de fin. Par exemple:
aaa,bbb,ccc CRLF zzz,yyy,xxx
(La règle 3. ne s'applique pas dans ce défi)
Dans chaque enregistrement, il peut y avoir un ou plusieurs champs, séparés par des virgules. Les espaces sont considérés comme faisant partie d'un champ et ne doivent pas être ignorés.
Chaque champ peut ou non être placé entre guillemets. Si les champs ne sont pas entourés de guillemets doubles, les guillemets doubles peuvent ne pas apparaître à l'intérieur des champs. Par exemple:
"aaa","bbb","ccc" CRLF zzz,yyy,xxx
Les champs contenant des sauts de ligne (CRLF), des guillemets doubles et des virgules doivent être placés entre guillemets doubles. Par exemple:
"aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxx
Si des guillemets doubles sont utilisés pour entourer des champs, un guillemet double apparaissant à l'intérieur d'un champ doit être échappé en le précédant d'un autre guillemet double. Par exemple:
"aaa","b""bb","ccc"
Exemple
Contribution:
,"Hello, World!"
"aaa","b""bb","ccc"
zzz,yyy,
"aaa","b
bb","ccc","fish",""
Devrait donner la sortie:
2, 3, 3, 5
Vous pouvez donner les valeurs de sortie de la manière qui vous convient le mieux.
Bibliothèques
Vous pouvez utiliser n'importe quelle bibliothèque que vous aimez.
Des réponses impressionnantes jusqu'à présent mais il nous manque une réponse en ligne de commande / bash qui serait particulièrement cool.
R , 40 octets
Essayez-le en ligne!
Selon la documentation de
count.fields
, les champs avec des sauts de ligne obtiennent un nombre de champs NA pour la ligne initiale, nous les filtrons donc.la source
JavaScript (ES2018),
4259 octetsAfficher l'extrait de code
la source
s
drapeau sur l'expression régulière. Ce n'est pas si important que ça ;-) Et bonne utilisation, btw!Gelée , 12 octets
Un port de réponse récursive Stax - allez donner du crédit!
Essayez-le en ligne!
Comment?
Peut-être que vous préférez
ṣ”"m2ẎỴċ€”,‘
-Ẏ
est resserré etċ€
compte les virgules dans chacun.la source
Python, 63 octets
Renvoie la sortie dans un
map
objet itérable .la source
lambda
fonction, vous pouvez le réduire à 54 octetsWolfram Language (Mathematica) , 30 octets
Essayez-le en ligne!
la source
Perl 5 .10.0,
5553 octetsEssayez-le en ligne!
Explication:
la source
Java 10, 101 octets
Essayez-le en ligne.
Explication:
la source
Gelée , 17 octets
Essayez-le en ligne!
-1 merci à Jonathan Allan . duh duh duh ...
la source