定期的にCSV形式のログをメールで送信するiPhoneアプリを使用しています。そのログのデータを古いログと合計するrubyスクリプトがあります。最近、アプリ開発者がアップデートをリリースしました。これは、なんらかの理由で、各行の最後にキャリッジリターンを追加し、スクリプトが失敗する原因になりました。ドキュメントによると、:row_end
デフォルトでは、または(1.9.2)の:auto
いずれかを受け入れる必要があります。Ruby 1.8.7、1.9.2、および1.8.7でFasterCSVを使用してみました。これらのさまざまな試行で、次のようなさまざまなエラーメッセージが表示されます。\r\n
\n
CSV::IllegalFormatError
- 引用符で囲まれていないフィールドでは、
\r
または\n
(1行目)(FasterCSV::MalformedCSVError
)は許可されません - 複製できません
NilClass
(TypeError)
1.9.2で。(\r
はフィールドにありません。行の終わりです!)以前のデータは次のようになりました。
03-12-2012 07:59,120.0,
03-11-2012 08:27,120.0,
03-10-2012 07:57,120.0,
これで、次のようになります。
03-12-2012 07:59,120.0,^M
03-11-2012 08:27,120.0,^M
03-10-2012 07:57,120.0,^M
^M
CSVが最後のフィールドにあると考えている可能性があると考えて、別のカンマを追加してみました。
03-12-2012 07:59,120.0,,^M
無駄に。
私が想像できる唯一のことは、CSVではすべてのフィールドが二重引用符で囲まれている必要があるということですか?最初にファイルを読み取り、最後を切り刻み、次に配列をCSVで処理するなど、さまざまな回避策を考えることができますが、最初に、何が間違っているのかを調べたいと思います。うまくいくようです。
ちなみに私のコードは単純です:
CSV.foreach(File.join($import_dir, file)) do |record|
そして、私は:row_end => "\r\n"
無駄に設定しようとしました。
私はMacOSX10.6.8を使用しています。