- ベストアンサー
全角の比較は無理なのでしょうか?
- 全角の比較が上手く機能せず、緑色になってしまう問題があります。
- 質問者は「●」が入っているはずの変数$trm14が正しく判定されない場合、空欄になっていることを指摘しています。
- 一方、数字の比較では正しく機能することが確認されています。代わりに数字を使用する方法が提示されています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
れれ もう一度見直してみると >if ($trm14 eq "●") {print "<font color='green'>";} > else {print "<font color='red'>";} >$trm14には間違いなく「●」が入っています この場合「真」ですよね? これ以外の場合に「偽」にしたいということですよね(かくに~んw) ################################################# おっしゃるように、同じコードの中で #例1 $trm = '●'; print 'OK' if ($trm eq '●'); として、実行すると #例1実行結果 OK と出力されるはずです。(ここ確かめてみてください) 上記を踏まえて もしかして・・・ もしかしてですが if ($trm14 eq "●") の部分は、わかりやすくしたのではなくこのままの状態です? というのも、このままだと「完全一致」ということになりますよね もし文の中にある●をさがしたいのであれば「正規表現」でマッチさせないといけないです。 if ($trm14 =~ /●/) だと、文中にある●をさがしてif文を真にさせることができます。 (もうしわけないどのていどのプログラミングレベルかわからないものでこちらもさぐりさぐりですw) #例2 $trm = 'ははは●ははは'; print 'OK' if ($trm =~ /●/); #例2実行結果 OK #---------------------------------------------------- わたしの経験上、Perlでの文字コードは入力も出力もUTF-8に統一したほうがいいです。 というのもSHIFT-JISだと他のコードとかぶる部分があるのでうまくいかないときがありますし、 Perl自体UTF-8よりにできていると聞いたので今までそうしてきました。 ファイルを読み込む際にUTF-8に変換して、プログラムコード自体もUTF-8にすると混乱を避けることができます。 実際にエンコードを変換する方法は以下参照 http://www.rwds.net/kuroita/program/Perl_unicode.html Perlバージョン5位からは以前のように、jcode.plを使わなくとも文字コードの取り扱いが楽になってますよ。 それとプログラムを書く場合、メモ帳ではなく文字コードを指定できる「秀丸」などを使ったほうがいいです。 さらに! CGIということなのでHTMLの文字コードタグも同じにしないといけませんよー とりあえず、思いつく限りを羅列してみました。何かのヒントになればいいのですがいろいろな環境がありますので「これだ!」とは言い切れないのが・・・わたしも年食った証拠かな><;
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
いちおう念の為ですが, 「文字の扱いが楽になった」のは Perl5.8 以降といっていいと思います>#2. 5.6 より前 (5.003 とかの時代) ではあまり考えられていなかったし, 内部的に Unicode化した 5.6 も実際上はいろいろと問題があったはず.
お礼
情報有り難うございました。 お陰様で上手く行きました。
おそらく 文字コードの問題ではないでしょうか? $trm14とPerlプログラムのエンコードを同じにして比較すると、期待通りになると思いますよ。 試しにWindowsのコマンドプロンプトでやってみたところ、問題なく機能していました。
お礼
早速有り難うございました。 まず、全くダメではないとのこと、 少しは希望がもてました。 して、エンコードを合わせる件ですが、 具体的にはどうすれば宜しいのでしょうか。 実際の動きは、 $trm14の項目を持つファイルは、excelから作り出しているテキストファイルです。 それをcgiで入力し、ある項目を表示する際に●が入っていれば緑、入っていなければ赤と 表示し分けたいというモノです。 cgiで表示するページの指定は、 <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> のようにしています。 これをexcel作業時のエンコードに合わせる、ということでしょうか。 (といってもどうすればよいか分かりません。) お手数ですが、 具体的に教えていただければ嬉しいです。 宜しくお願いします。
補足
お礼に書き忘れましたので、 ココに書かせて貰いました。 質問で >$trm14には間違いなく「●」が入っています。 と書きましたが、どう調べたのかといいますと、 print "$trm14\n";とやって●が表示された、 ということです。 これだと同じcgi内でやっていることなので、 文字コードは同じと解釈されている、ということにはならないのでしょうか。 今ひとつ分かっていません。 宜しくお願いします。
お礼
お礼が遅くなりました。 何回も有り難うございます。 色々教えていただきましたが、 ズバリの比較ではダメでした。 やはりtrm14が●と認識されていないみたいです。 正規表現に直してやってみたら、真偽の判定が出来ました。 ただ、●はtrm14にあるだけではないので、結論は使えません。 そして、 色々やった結果、上手く行きました。 実際のファイルで、trm14は最後の項目でした。 区切り符号に<>を使っており、trm14の後ろに<>が無かったので入れたら上手く判定できました。 今回教えていただいたことは別途復習しておきます。 大変お世話になりました。