各csvレコードのフィールド数が異なるテキストファイルを想像してください。タスクは、ファイルの各レコードにあるフィールドの数を出力するコードを記述することです。ファイルにヘッダー行がなく、選択に応じてファイルまたは標準入力から読み込むことができると想定できます。
ファイルの各行の定義について以下で説明するcsvルール用のrfc4180のバージョンを想定できます。以下は、仕様の関連部分を軽く編集したバージョンです。
CSV形式の定義
各レコードは、改行(CRLF)で区切られた個別の行に配置されます。例えば:
aaa,bbb,ccc CRLF zzz,yyy,xxx CRLFファイルの最後のレコードには、終了改行が含まれる場合と含まれない場合があります。例えば:
aaa,bbb,ccc CRLF zzz,yyy,xxx
(ルール3はこのチャレンジには適用されません)
各レコード内には、コンマで区切られた1つ以上のフィールドがあります。スペースはフィールドの一部と見なされるため、無視しないでください。
各フィールドは、二重引用符で囲まれていてもいなくてもかまいません。フィールドが二重引用符で囲まれていない場合、フィールド内に二重引用符が表示されない場合があります。例えば:
"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の回答がありません。