2013年8月8日 2:24:48
いつぞやも :row_sep :auto をすれば混合しても問題ないとかなんとか書いた気がするがダメでした。
PHP で csv の書き込みを行うと、1行だけ変えるとか付け足すみたいな状況で複数の端末で行っていると、
改行コードがそれぞれ複数存在してしまうようでした。
そのため、ruby で読み込むとエラーとなってしまいます。
読み込み時に改行コードのオプションを付けるが、
:auto 意味は1行目の改行コードでいきますね^^てことだ。
つまり複数あったら、異なる改行コードが出た時にエラーが出る。
それで今回、素人ながら夜の 20時から6時間後の2時に解決することができたのでwメモっておく
filePath = "path/to/file.csv"
csvText = ""
File.open(filePath , "rb" ) { |io|
csvText = io.read
}
csvText.gsub!(/(\r\n|\n|\r)/ , "\r\n")
File.open(filePath, "wb") { |io|
io.write(csvText)
}
↓ filePath を rb モードで read し、string を csvText に入れる。
File.open(filePath , "rb" ) { |io|
csvText = io.read
}
↓ 格納された csv が string となって一つになった。
この状態で \r\n \n \r のいずれかである時、 \r\n に置換する
csvText.gsub!(/(\r\n|\n|\r)/ , "\r\n")
↓ 置換できたので、あとは wb モードで上書き、戻すだけ。
csvText.gsub!(/(\r\n|\n|\r)/ , "\r\n")
File.open(filePath, "wb") { |io|
io.write(csvText)
}
これで改行コードが複数であっても統一することができました。
CSV.foreach( filePath , encoding: "utf-8" ) do |yomeruyo|
warosu = yomeruyo[0]
terawarosu = yomeruyo[1]
end