Rubyで単純なCSVファイルを開き、特定のキーを見つけて値を1つ増やしてから、再度保存しようとしています。CSVファイルを開き、特定の値を1つずつインクリメントする方法
例CSVファイル:だから
require 'csv'
currentStore = store # store is passed as a parameter
if currentStore.nil? && currentStore.empty?
currentStore = "nil"
store_data = {}
File.open('store_count.csv').each_line {|line|
line_data = line.split(",")
if !line_data[1].nil? && !line_data[1].empty?
store[line_data[0]] = line_data[1].strip.to_i
else
next
end
}
if store_data.key?(currentStore)
store_data[currentStore] += 1
CSV.open("store_count.csv", "wb") {
|csv| store_data.to_a.each {
|elem| csv << elem
}
}
end
私は 'store3' をインクリメントした場合、たとえば、私が見えるように私のファイルを必要とする:
store1,0
store2,0
store3,0
...etc.
Rubyコード
store1,0
store2,0
store3,1
etc...
私は値を増やした後、私はCSVに再保存する必要があります。
を行うことができますあなたの最良のオプションは、CSVを読み、新しいCSVにそれを書くことで、プロセス中にあなたに一致する値を更新条件 –
ファイルをメモリに読み込んで修正し、元のファイルに書き直すのは悪い考えです。ジョブが失敗すると、元のファイルが部分的に上書きされた場合に破損する可能性があります。 @WandMakerによると、新しいCSVファイルに書き込む。次に、元のファイルの名前を変更し終えたら、新しいファイルの名前を元の元の名前に変更し、古い名前で必要なものを実行します。また、行単位のI/Oを使用してください。スケーラビリティの問題がなく[ファイルをスラッシングする](http://stackoverflow.com/q/25189262/128421)の速さです。 –
問題を解決しようとするより完全な例が必要です。つまり、あなたは裸足であることを実証しただけなので、私たちがチュートリアルを書いたり、あなたのためのコードを書いたり、トピックには載っていないように思えます。リンクされたページを含む「[mcve]」と「[ask]」をお読みください。 –