From: Kenji Yamashita Date: 2004-04-11T15:01:21+09:00 Subject: [ruby-dev:23365] mswin32版rubyのgetsの挙動について 山下です。 ExcelファイルをCSV形式で保存して、Rubyで処理しようとしています。最終 的にExerbでWin32アプリケーションにする予定ですが、慣れもあってcygwin 版のrubyを使ってスクリプトを書きました。 一応、完成したのでExerbでEXEファイルを作成して実行してみたのですが、 思うように動いてくれません。ExerbのFAQにmswin32版での動作を確認する ようにとあったので、Downloadして動かしてみたのですが、やはり動きませ んでした。 動きを検証していくと、getsの振る舞いの違いよるものだということが分か りました。具体的にはmswin32版rubyで"\r"(0x0d)をセパレータとしたgets がうまく動きません。CSVファイルの各行は"\r\n"(0x0d0x0a)で区切られて おり、各行には"\n"(0x0a)を含むフィールドが含まれています。この状況で 行単位で処理を行いたいのですが、 1. gets("\r\n")とすると、ファイル全体が1行として取り込まれます 2. gets("\n")とすると、"\n"を含むフィールドの途中で分割されます 3. gets("\r")とすると、ファイル全体が1行として取り込まれます 2.は当然として、1.はcygwin版とmswin32版で改行の取り扱いが違うことに よるものだと思っていますが、3.が何故このような動きをするのかが分かり ません。 mswin32版rubyでは明示的に"\r"をセパレータとして指定しても動作しない のは仕様でしょうか?それとも私が何か勘違いをしているのでしょうか? mswin32版rubyで上記の処理をする場合のよい方法があれば教えていただけ ればと思います。よろしくお願いいたします。