Tôi đang làm việc trên một dự án liên quan đến phân tích cú pháp tệp csv có định dạng lớn trong Perl và tôi đang tìm cách làm cho mọi thứ hiệu quả hơn.Làm cách nào để phân tích cú pháp tệp CSV trong Perl hiệu quả?
Cách tiếp cận của tôi đã từng là split()
tệp theo dòng đầu tiên, sau đó lại split()
mỗi dòng một lần nữa bằng dấu phẩy để nhận các trường. Nhưng điều này tối ưu vì ít nhất hai lần truyền dữ liệu được yêu cầu. (một lần để phân chia bởi các dòng, sau đó một lần nữa cho mỗi dòng). Đây là một tập tin rất lớn, do đó việc cắt giảm một nửa sẽ là một cải tiến đáng kể cho toàn bộ ứng dụng.
Câu hỏi của tôi là, phương pháp phân tích cú pháp tệp CSV lớn nhất có hiệu quả nhất bằng cách nào chỉ sử dụng các công cụ được tích hợp sẵn?
lưu ý: Mỗi dòng có một số lượng mã thông báo khác nhau, vì vậy chúng tôi không thể bỏ qua các dòng và được phân tách bằng dấu phẩy. Ngoài ra, chúng tôi có thể giả định các trường sẽ chỉ chứa dữ liệu ascii chữ và số (không có ký tự đặc biệt hoặc các thủ thuật khác). Ngoài ra, tôi không muốn xử lý song song, mặc dù nó có thể hoạt động hiệu quả.
chỉnh sửa
Nó chỉ có thể liên quan đến công cụ tích hợp mà tàu với Perl 5.8. Vì những lý do quan liêu, tôi không thể sử dụng bất kỳ các module bên thứ ba (thậm chí nếu được lưu trữ trên CPAN)
chỉnh sửa khác
Giả sử rằng giải pháp của chúng tôi chỉ được phép để đối phó với các dữ liệu tập tin khi nó hoàn toàn được nạp vào ký ức.
chưa khác chỉnh sửa
Tôi chỉ nắm cách ngu ngốc câu hỏi này là. Xin lỗi vì làm mất thời gian của bạn. Bỏ phiếu để đóng.
Bất kỳ lý do bạn cần các công cụ chỉ built-in (tôi giả sử không có quyền admin). Nếu không, hãy thử sử dụng mô-đun «Văn bản :: CSV' perl. Nó làm cho việc phân tích cú pháp CSV dễ dàng hơn rất nhiều: http://search.cpan.org/~erangel/Text-CSV/CSV.pm –
Tại sao đọc toàn bộ tệp và 'tách()' theo dòng? Nếu bạn chỉ cần mở tệp và sử dụng thành ngữ ' ', bạn có thể lặp lại trên các dòng để bạn chỉ cần lưu trữ một dòng tại một thời điểm trong bộ nhớ. –
mob
@ Giống như một số mô-đun perl từ cpan không yêu cầu bất kỳ biên dịch và có thể được sử dụng mà không có quyền admin ... nếu có một trong những loại nó vẫn sẽ được liệt kê ra khỏi mẫu cần thiết của bạn? – Prix