2010-08-17 37 views
20

Sử dụng Ruby 1.9 và CSV lib, tôi dường như không thể nối thêm hàng. Ví dụ trong tài liệu sẽ mở tệp và ghi đè hàng. Cách chính xác để thêm hàng vào tài liệu là gì?Nối hàng vào tệp csv Ruby 1,9 CSV lib

Ví dụ từ tài liệu:

require 'csv' 
CSV.open("path/to/file.csv", "wb") do |csv| 
    csv << ["row", "of", "CSV", "data"] 
    csv << ["another", "row"] 
    # ... 
end 

Trả lời

29

Tôi nghĩ rằng bạn có thể thay đổi mở để sử dụng ab:

CSV.open("t.csv", "ab") do |csv| 
8

Tôi thường sẽ sử dụng sau đây để viết vào một tập tin csv (Hoặc bất kỳ tập tin)

File.open("filename", 'a+') {|f| f.write("datatowrite\n)} 
+4

Lưu ý rằng 'a +' là để đọc * và * [ghi/nối thêm] (http://ruby-doc.org/docs/ProgrammingRuby/html/ref_c_io.html). Nếu bạn chỉ cần nối thêm, thì 'a' là đủ. Bạn cũng có thể sử dụng [File :: APPEND] (http://ruby-doc.org/docs/ProgrammingRuby/html/ref_c_file.html), có thể kết hợp với các cài đặt chế độ khác. –

+0

Chúng tôi luôn sử dụng dấu + vì nó sẽ tạo tệp nếu không tồn tại. – user1735921

2
File.open('filename', 'a'){ |outfile| 
    CSV::Writer.generate(outfile) do |csv| 
    csv << ['c1', nil, '', '"', "\r\n", 'c2'] 
    end 
} 
+1

AFAIK CSV :: Writer là [không có sẵn trong ruby ​​1.9] (http://stackoverflow.com/a/2140482/514483) – robd