Tôi đã thực hiện một số thử nghiệm với CSV.table
. Tôi có hai tệp CSV nhỏ và gần như giống hệt nhau, tuy nhiên một tệp thiếu hàng tiêu đề.Ruby 1.9.3 - Cách CSV.table biết nếu không có tiêu đề nào trong tệp CSV?
Khi tôi chạy CSV.table
đối với tệp CSV có hàng tiêu đề, mọi thứ hoạt động như mong đợi.
Khi tôi chạy nó chống lại các tập tin CSV mà không có dòng tiêu đề tôi nhận được:
NoMethodError: undefined method `encode' for nil:NilClass
Tôi cố gắng này với các loại dữ liệu khác nhau, với các loại khác nhau của tiêu đề, và nhận được kết quả tương tự.
Tôi tò mò về sự kỳ diệu của CSV.table
. Nếu tôi sử dụng CSV.parse
với tiêu đề được đặt thành true, thì nó luôn làm cho hàng đầu tiên là tiêu đề không có vấn đề gì. Vì vậy, tôi đã sử dụng CSV.table
để kiểm tra xem tệp CSV được nhập có hàng tiêu đề hay không nhưng tôi không quá thoải mái với điều này vì tôi không hiểu liệu có hay không khi nào hoặc sẽ không hoạt động theo cách tôi đang sử dụng.
begin
CSV.table(csv_file_path)
rescue
# Add error to log or something.
end
Có ai biết không?
P.S. Tôi đã đọc qua điều này và mã nguồn mà nó cung cấp trên mỗi phương thức - http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html
Cảm ơn @ andy-h Tôi đã có một tình huống tương tự khi tôi chạy 'contents = CSV.open" languages.csv ", tiêu đề: true, header_converters:: symbol' Tôi gặp lỗi này: 'undefined method' encode 'for nil : NilClass (NoMethodError) '. Nó phàn nàn về phương thức 'header_converter:: symbol'. Sau khi xem lại tệp "languages.csv", tôi thấy tiêu đề của nó bắt đầu bằng dấu cách "". Loại bỏ không gian đó đã giải quyết vấn đề đó. – egyamado
** Hiệu chỉnh. ** Ý tôi là tôi thiếu một dấu cách ở hàng đầu tiên '", tên, địa chỉ, .... "' khi tôi thêm khoảng trắng như vậy ", tên, địa chỉ, ...." Tôi đã có thể chạy mã của tôi. – egyamado