5

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
4

2 に答える 2

3

CSV を書き込む前に文字列として取得する場合は、 を使用String#chompして末尾の改行を削除できます。

以下を使用してファイルを書き込んでいる場合:

File.open('my.csv','w'){ |f| f.puts my_csv }

…その後、自分で改行を追加しており、次の方法で回避できます。

File.open('my.csv','w'){ |f| f.write my_csv }

CSV を生成して書き込むための実際のコードを提供していただければ、さらに正確なサポートを提供できます。

于 2012-04-21T14:29:31.927 に答える
0

sub!ファイルの末尾にある改行を取り除くために使用できます。

# my_csv_contents contains all of the CSV data
my_csv_contents.sub!(/(\r?\n)*\z/, "")
于 2012-04-21T14:07:20.563 に答える