• ベストアンサー

Ruby1.9での文字列操作について。

Ruby1.9での文字列操作について。 今までRuby1.8を使用していましたが、Ruby1.9に変えてから、次の4種類の問題が出てきました。 (※Ruby1.9に変えてから、#encoding: shift_jisを定義しております) どれか1種類でも結構ですので、Ruby1.9での対策、代替の処理について教えてください。 <問題1> ■文字列を指定のバイト位置まで削除する □現在(Ruby1.8)のコード moji = "1あアあアイ234565789" moji[4,14] = "" →1.8では、"1あア"となりますが、1.9では、"1あアあ"となります。 <問題2> ■文字列の中から指定文字が見つかったバイト位置の算出 □現在(Ruby1.8)のコード n = "あいうえお".index("う") →1.8では、n=4となりますが、1.9では、n=2となります。 <問題3> ■指定した年月日の存在チェック □現在(Ruby1.8)のコード y = 1900 m = 3 d = 10 if Date.exist?(y,m,d) p "test# end →1.8では、trueとなりますが、1.9では実行時にNoMethoodErrorとなります。 <問題4> ■半角英数字→全角英数字変換 □現在(Ruby1.8)のコード sss = moji.tr('a-zA-Z0-9', 'a-zA-Z0-9') →1.9では実行時にエラーメッセージが出力されます(略) 色々と書きましたが、どうかお助けください。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

1)2) http://doc.okkez.net/static/191/class/String.html http://doc.okkez.net/static/191/doc/spec=2fm17n.html ・ASCII-8BITを使う。 あるいは ・バイト単位ではなく文字単位で処理するようにアルゴリズムを変更する 3) http://www.ruby-lang.org/ja/man/html/Date.html を見ると、exist?って無いんですよ。検索したら、exist?で日付の正当性を確認する、と説明しているサイトもあるんですが... そのあたりの経緯は詳しい人におまかせして。 ・ valid_~? メソッドが使う 4) http://doc.okkez.net/static/191/method/String/i/tr.html 1.9でもtrはあるので ・mojiがStringではない ・Encode関係で両者の対応が取れてない ということではないでしょうか

NOBU4517
質問者

お礼

丁寧な回答有難うございました。 HPに詳細な情報が書かれていますね。参考にさせて頂きます。 3)の件、Date.valid_date?(y,m,d)で解決しました。

関連するQ&A