각 csv 레코드가 다른 수의 필드를 가질 수있는 텍스트 파일을 상상해보십시오. 이 작업은 파일의 각 레코드에 몇 개의 필드가 있는지 출력하는 코드를 작성하는 것입니다. 파일에 헤더 행이없고 원하는대로 파일 또는 표준 입력에서 읽을 수 있다고 가정 할 수 있습니다.
csv 규칙에 대해 rfc4180 의 버전을 가정 할 수 있으며 파일의 각 줄 정의에 대해 아래에서 설명합니다. 다음은 사양의 관련 부분을 약간 편집 한 버전입니다.
CSV 형식의 정의
각 레코드는 줄 바꿈 (CRLF)으로 구분 된 별도의 줄에 있습니다. 예를 들면 다음과 같습니다.
aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF파일의 마지막 레코드는 줄 바꿈이 있거나 없을 수 있습니다. 예를 들면 다음과 같습니다.
aaa,bbb,ccc CRLF zzz,yyy,xxx
(규칙 3은이 도전에 적용되지 않습니다)
각 레코드 내에 쉼표로 구분 된 하나 이상의 필드가있을 수 있습니다. 공백은 필드의 일부로 간주되므로 무시해서는 안됩니다.
각 필드는 큰 따옴표로 묶을 수 있습니다. 필드를 큰 따옴표로 묶지 않으면 큰 따옴표가 필드 안에 나타나지 않을 수 있습니다. 예를 들면 다음과 같습니다.
"aaa","bbb","ccc" CRLF zzz,yyy,xxx줄 바꿈 (CRLF), 큰 따옴표 및 쉼표가 포함 된 필드는 큰 따옴표로 묶어야합니다. 예를 들면 다음과 같습니다.
"aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxx큰 따옴표를 사용하여 필드를 묶는 경우 다른 큰 따옴표를 앞에 두어 필드 안에 나타나는 큰 따옴표를 이스케이프해야합니다. 예를 들면 다음과 같습니다.
"aaa","b""bb","ccc"
예
입력:
,"Hello, World!"
"aaa","b""bb","ccc"
zzz,yyy,
"aaa","b
bb","ccc","fish",""
출력을 제공해야합니다 :
2, 3, 3, 5
가장 편리한 방법으로 출력 값을 제공 할 수 있습니다.
라이브러리
원하는 라이브러리를 사용할 수 있습니다.
지금까지는 멋진 답변을 받았지만 특히 멋진 명령 줄 / bash 답변이 누락되었습니다.