這裏是我的代碼:遇到問題把我頭回我的CSV文件
require 'CSV'
contents = CSV.read('/Users/namename/Desktop/test.csv')
arr = []
first_row = contents[0]
contents.shift
contents.each do |row|
if row[12].to_s =~ /PO Box/i or row[12].to_s =~ /^[[:digit:]]/
#File.open('out.csv','a').puts('"'+row.join('","')+'"')
arr << row
else
row[12], row[13] = row[13], row[12]
#File.open('out.csv','a').puts('"'+row.join('","')+'"')
arr << row
end
end
arr.unshift(first_row)
arr.each do |row|
File.open('out.csv', 'a').puts('"' + row.join('","') + '"')
end
首先我.shift
使我的頭字段不抓的格局(最終交換)的第一個條件的第一個.each
循環。然後,我有條件地交換匹配模式的單元格值,然後將正確移位的值存儲在數組中。在此之後,我.unshift
試圖放回我存儲在first_row
我的標題字段,但是當我查看生成的out.csv
文件時,我得到所有我的標題在中間。爲什麼?
示例數據:
https://gist.github.com/anonymous/e1017d3ba81634d9e1227e7fe49536cb
請編輯您的帖子,包括你正在使用的數據的一個例子。 –
@Jordan,請參閱編輯。 – Forwarding
我很高興我的答案幫助解決了您的問題。最後一個與CSV無關的註釋:當您使用['File.open'](https://ruby-doc.org/core-2.3.1/File.html#method-c-open)時,您需要確保文件在您完成後關閉。最簡單的方法是使用塊形式,就像我的答案一樣,它會自動關閉文件。否則,你必須在由File.open返回的File對象上調用['close'](https://ruby-doc.org/core-2.3.1/IO.html#method-i-close)。您應該在'ensure'塊中執行此操作,以便即使出現錯誤也會發生。 –