快速的你在做什麼分析:
您打開一個文件進行讀取:
input = File.open TestFile, 'r' #read
您打開同一個文件進行讀取 - 這將刪除的內容。
output = File.open TestFile, 'w' #write
你讀現在空文件:
CSV.filter input, output, :headers => true, :write_headers => true, :return_headers => true do |csv|
puts "I'm here" ## <- My addition to show you never in the loop.
csv << ["Test"] if row.header_row?
end
可能的解決方案:
你必須定義不同的輸入和輸出文件,並進行手動頭定義:
#Prepare some test data
TestFile = 'test.csv'
File.open(TestFile, 'w'){|f|
f << <<csv
a;b;c
1;2;3
1;2;3
csv
}
require 'csv'
input = File.open TestFile, 'r' #read
output = File.open('x.csv', 'w') #write
output << "new a; new b;new b"
CSV.filter input, output, :headers => true, :write_headers => true do |row|
end
input.close
output.close
#You may delete the input file and rename output file
作爲替代方案,您可以定義您自己的頭:
CSV.filter(input, output,
:headers => true, #remove header from input
:out_headers => [:xa,:xb, :xc], #define output header
:write_headers => true,
) do |row|
end
您正在打開'TestFile'來讀取,然後寫入。你不能那樣做。只要你嘗試打開一個文件來寫就會被截斷。你必須寫入一個單獨的文件。 –
請在重寫標題後添加您正在閱讀的CSV文件的最小示例,以及該文件的示例。不要讓我們自己創造;我們需要全部使用相同的沙盒玩具。請閱讀「[問]」。 –