• 締切済み

半角文字を含むテキストの整形について

ファイルの中身が「abcCLEてすと」という文章のファイルをopenして、 $text = "abcCLEてすと"  になるように代入し、そこから「abc」を削除して 「CLEてすと」という文にしようと思い、 $text =~ s/a|b|c//g; print "結果:$text\n"; のようなプログラムをつくり、結果を表示すると 「結果:bkEてすと」 と表示されてしまいます。 abcはうまく削除されているようですが、他の文字が変化してしまっているようです。 関係ない文字を変化させない為には、どうすればいいでしょうか?

みんなの回答

回答No.3

まだできてないのかな? e101treさんの方法が使えるのならそれが一番良いと思います。 use encodingが使えない場合は私の書いた方法が手っ取り早いです。 しかし、jcode.plはUTF-8に対応していないようなの、Jcode.pmを使うか、或いはjcode.plでeucを使うようにすればできると思います。

  • e101tre
  • ベストアンサー率38% (7/18)
回答No.2

変化する原因は,No.1 さんがおっしゃっている通りです。 で,文字コードを変えずに修正するには, use encoding "shift_jis"; の1文を追加してみてください。

perlman
質問者

お礼

回答ありがとうございます。 後ほど、試してみようと思います。

回答No.1

Cの二バイト目がbと同じなためにそうなってしまいます。 文字コードを変えても良いのなら、ShiftJISではなくEUCかUTF-8を使えば問題なくabcを削除できます。 コード全体に手を加えるのが面倒なら、直前でUTF-8に変換して、abcを削除してからShiftJIS に戻すという手も有ります。(少し重くなりますが)

perlman
質問者

補足

回答ありがとうございます。 Perl初心者で、色々な壁と戦っております。 直前にUTF-8に変換する為に、 require 'jcode.pl'; jcode::convert(\$str, 'UTF-8'); $text =~ s/a|b|c//g; jcode::convert(\$str, 'sjis'); print "結果:$text\n"; このようなプログラムに変更して、動かしてみましたがうまく動きませんでした。 間違っているでしょうか? 恐縮ですが、あとひとアドバイスお願いできますでしょうか。

関連するQ&A