Không có gì sai với CSV đến một điểm
CSV hoạt động tốt đối với dữ liệu được xác định cứng nhắc không có khả năng thay đổi định dạng và không gây ra nhiều bất ngờ cho trình phân tích cú pháp người nhận.
Đây là một danh sách tiện dụng của các vấn đề lớn:
- Thoát "" s trong "" (trường chứa dấu phân cách trường)
- "" chứa CRLFs (trường chứa dấu phân cách dòng)
- Unicode (định dạng văn bản cơ bản có thể không đủ)
- Các đầu cuối dòng khác nhau cho các HĐH khác nhau (là CR hoặc CRLF hoặc LF hoặc NUL?)
- Nhận xét nội tuyến (dòng có tiền tố #, //, - ,; v.v.)
- Quản lý phiên bản (phiên bản mới nhất của tệp chứa nhiều hoặc ít trường)
- Phân biệt giữa NULL và dữ liệu trống (, "", trống nhưng ,, là null?)
Bạn có thể tiếp cận điều này với một tiêu đề siêu dữ liệu mô tả cách các trường nên được phân tích cú pháp, nhưng sau đó bạn cũng có thể chỉ sử dụng XML. Đó là do loại lộn xộn CSV dạng tự do mà nó được phát minh. Cách tiếp cận XML dường như quá nặng nề đối với những gì có thể, trên mặt của nó, là một vấn đề đơn giản.
Một thay thế phổ biến là chiến lược "phân định nhân vật kỳ lạ". Điều này giải quyết được rất nhiều vấn đề thoát ở trên vì bạn sử dụng một cái gì đó như | (pipe) ký tự để phân định trường và CRLF để chấm dứt bản ghi. Điều này không xoay quanh vấn đề trường nhiều dòng (trừ khi bạn sử dụng bộ đếm trường) nhưng bạn có được các dòng được định dạng độc đáo cho con người.
Nhìn chung, nếu bạn chỉ tìm kiếm một cách đơn giản để xử lý loại tệp này thì trong thế giới Java, bạn có thể chỉ cần ném OpenCSV vào nó. Bằng cách đó, bạn trừu tượng hóa tất cả các vấn đề thành một khung được thiết lập.