RubyからCSVファイルを生成していますが、データを受信しているシステムが下部の空白行を受け入れることができません。
ただし、すべての行(CRLFで終わる)を追加した後も、最後の行にはCFLFが残っているため、受信システムは空白のレイジー行があると見なします。
この(ハックっぽい)コードを実行してファイルを開き、切り捨てることで解決しました。
size = File.size(filename)
File.truncate(filename, size-3)
それが最後の行である場合、CRLFを追加しないためのruby CSVの機能が欠けていますか?
CSVを作成するための私のコードは次のとおりです。
csv = CSV.open(filename, "w", {:row_sep => "\r\n"})
.. code to create an array of cols ..
csv << cols
これをファイルではなく文字列を使用するように変換してみました。しかし、私はそれをすることに成功しませんでした。<<演算子を使用してエラーが発生し続けました。
更新:間違った質問があったことがわかりました...
久しぶりですが、ようやく何が起こっているのかわかりました。私がアップロードしていたホストシステムも、ファイルの最後にある改行を処理できます。これは、RubyCSVが間違った改行文字を挿入していたためです。\r \ r \ n \ r \ nの挿入!私がテキストファイルとして書くなら、それはこれをしています。バイナリファイルとして書くと問題は解決します。
他の誰かが同じ問題を見た場合、これは私のRubyでした:
csv = CSV.open(filename, "w", {:row_sep => "\r\n"}) # actually writes \r\r\n
バイナリモードはそれを修正します:
csv = CSV.open(filename, "wb", {:row_sep => "\r\n"}) # correctly writes \r\n