Hãy tưởng tượng một tệp văn bản trong đó mỗi bản ghi csv có thể có số lượng trường khác nhau. Nhiệm vụ là viết mã để xuất ra có bao nhiêu trường trong mỗi bản ghi của tệp. Bạn có thể giả sử không có dòng tiêu đề trong tệp và có thể đọc từ tệp hoặc đầu vào tiêu chuẩn, khi bạn chọn.
Bạn có thể giả sử một phiên bản của rfc4180 cho các quy tắc csv mà tôi sẽ giải thích bên dưới về định nghĩa của từng dòng của tệp. Đây là phiên bản được chỉnh sửa nhẹ của phần có liên quan của thông số kỹ thuật:
Định nghĩa định dạng CSV
Mỗi bản ghi được đặt trên một dòng riêng biệt, được phân tách bằng dấu ngắt dòng (CRLF). Ví dụ:
aaa,bbb,ccc CRLF zzz,yyy,xxx CRLFBản ghi cuối cùng trong tệp có thể có hoặc không có ngắt dòng kết thúc. Ví dụ:
aaa,bbb,ccc CRLF zzz,yyy,xxx
(Quy tắc 3. không áp dụng trong thử thách này)
Trong mỗi bản ghi, có thể có một hoặc nhiều trường, được phân tách bằng dấu phẩy. Không gian được coi là một phần của một lĩnh vực và không nên bỏ qua.
Mỗi lĩnh vực có thể hoặc không thể được bao trong dấu ngoặc kép. Nếu các trường không được đính kèm với dấu ngoặc kép, thì dấu ngoặc kép có thể không xuất hiện bên trong các trường. Ví dụ:
"aaa","bbb","ccc" CRLF zzz,yyy,xxxCác trường có chứa dấu ngắt dòng (CRLF), dấu ngoặc kép và dấu phẩy phải được đặt trong dấu ngoặc kép. Ví dụ:
"aaa","b CRLF bb","ccc" CRLF zzz,yyy,xxxNếu dấu ngoặc kép được sử dụng để bao quanh các trường, thì dấu ngoặc kép xuất hiện bên trong một trường phải được thoát bằng cách đặt trước nó bằng dấu ngoặc kép khác. Ví dụ:
"aaa","b""bb","ccc"
Thí dụ
Đầu vào:
,"Hello, World!"
"aaa","b""bb","ccc"
zzz,yyy,
"aaa","b
bb","ccc","fish",""
Nên cho đầu ra:
2, 3, 3, 5
Bạn có thể cung cấp các giá trị đầu ra theo bất kỳ cách nào bạn thấy thuận tiện nhất.
Thư viện
Bạn có thể sử dụng bất kỳ thư viện nào bạn thích.
Câu trả lời tuyệt vời cho đến nay nhưng chúng tôi đang thiếu một câu trả lời dòng lệnh / bash sẽ đặc biệt thú vị.