Wyobraź sobie plik tekstowy, w którym każdy rekord csv może mieć inną liczbę pól. Zadanie polega na napisaniu kodu, który wyświetli liczbę pól w każdym rekordzie pliku. Możesz założyć, że w pliku nie ma linii nagłówka i możesz czytać z pliku lub ze standardowego wejścia, zgodnie z wyborem.
Możesz założyć wersję rfc4180 dla reguł csv, które wyjaśnię poniżej dla definicji każdej linii pliku. Oto lekko edytowana wersja odpowiedniej części specyfikacji:
Definicja formatu CSV
Każdy rekord znajduje się w osobnej linii, oddzielonej linią podziału (CRLF). Na przykład:
aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF
Ostatni rekord w pliku może, ale nie musi, mieć kres końca linii. Na przykład:
aaa,bbb,ccc CRLF zzz,yyy,xxx
(Zasada 3. nie dotyczy tego wyzwania)
W każdym rekordzie może znajdować się jedno lub więcej pól oddzielonych przecinkami. Spacje są uważane za część pola i nie należy ich ignorować.
Każde pole może, ale nie musi, być ujęte w podwójne cudzysłowy. Jeśli pola nie są ujęte w podwójne cudzysłowy, wówczas podwójne pola mogą nie pojawiać się w polach. Na przykład:
"aaa","bbb","ccc" CRLF zzz,yyy,xxx
Pola zawierające podział wiersza (CRLF), podwójne cudzysłowy i przecinki powinny być ujęte w cudzysłowy. Na przykład:
"aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxx
Jeśli do zamykania pól stosowane są cudzysłowy, wówczas cytat pojawiający się w polu musi być poprzedzony innym podwójnym cudzysłowem. Na przykład:
"aaa","b""bb","ccc"
Przykład
Wejście:
,"Hello, World!"
"aaa","b""bb","ccc"
zzz,yyy,
"aaa","b
bb","ccc","fish",""
Powinien dać wynik:
2, 3, 3, 5
Możesz podać wartości wyjściowe w dowolny dogodny dla siebie sposób.
Biblioteki
Możesz użyć dowolnej biblioteki, którą lubisz.
Do tej pory niesamowite odpowiedzi, ale brakuje nam linii poleceń / odpowiedzi bash, co byłoby szczególnie fajne.
R , 40 bajtów
Wypróbuj online!
Na tej dokumentacji z
count.fields
pola z przerwami liniowych uzyskać liczbę pól z NA na początkowym linii, więc je odfiltrować.źródło
JavaScript (ES2018),
4259 bajtówPokaż fragment kodu
źródło
s
flagę wyrażenia regularnego. Nie żeby to miało tak duże znaczenie ;-) I miłe z tego, przy okazji!Galaretka , 12 bajtów
Port odpowiedzi rekurencyjnej Staxa - idź, daj kredyt!
Wypróbuj online!
W jaki sposób?
Może wolisz
ṣ”"m2ẎỴċ€”,‘
-Ẏ
jest zaostrzony iċ€
liczy przecinki w każdym.źródło
Python, 63 bajty
Zwraca wynik w
map
obiekcie iterowalnym .źródło
lambda
funkcji możesz sprowadzić to do 54 bajtówWolfram Language (Mathematica) , 30 bajtów
Wypróbuj online!
źródło
Perl 5 .10,0,
5553 bajtówWypróbuj online!
Wyjaśnienie:
źródło
Java 10, 101 bajtów
Wypróbuj online.
Wyjaśnienie:
źródło
Galaretka , 17 bajtów
Wypróbuj online!
-1 dzięki Jonathanowi Allanowi . duh duh duh ...
źródło