
ファイルから読み込んだ全角文字をあるキーワード(例えば"田中")が含んでいるか否かを判定するプログラムをつくりたいのですが、なかなか上手くいきません。ファイルをopenし中の文字を読込み、それを変数に格納、ifでeq使って判定したのですが、全角は判定してくれません。全角を判定するには一体どうしたら良いのでしょうか?
$filename = "####.txt";
open( $fh, "< $filename" ) #ファイルopen
or die "Cannot open $file: $!";
$key = 'キ'; #キーワードを決めて
while ($c = getc $fh ) { #比較する
if($c eq $key){
print "キーワードを見付けました。";
}
}
close(fh);
getcだとおそらく全角は文字コードを読み込んでしまうような感じでしょうか?print $c "\n";とすると文字化けします。しかし、printf("%d", $c);だと何も表示してくれません。これはord関数を使わねばならないのでしょうか?それとも別な方法が?等などためしたのですが、もう分かりません。
御指導御鞭撻をよろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
なぜ getcを使おうと思われたのでしょうか?
これは(なにもしなければ)バイト単位で取り込みますから、
> while ($c = getc $fh ) {
これで $c に入ってくるのは泣き別れしたバイトデータです。
>echo あ|perl -E "while ($c=getc) { say unpack q{H2}, $c}"
82
a0
0a
このような泣き別れたバイトデータと任意の多バイト文字を比較しても
決して等しくなることはありません、
どのようなフォーマットのデータなのかわかりませんが、
一行単位とかで読み込んで処理したほうが簡単だと思うのですがどうでしょうか?
返事が遅れました大変申し訳ございません。
getcを使うう理由は一行ずつ読み込むのは私のパソコンではメモリが足りないのか動かなくなってしまいます(セグメントフォルトと表示されます。)
getcだと安定して動きます。なぜかは知りませんが、一行ずつよりかは負担が軽いのでしょう、おそらく。
で、getcにて文字列比較は既に解決致しました。
実際文字列を比較出来ましたが、出来ないとかかれていたので?という感じですが、まぁ・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのflock関数でロックをかけ...
-
エクセルVBA コードが同じでも...
-
全角と半角文字が混在している...
-
openした後、closeしないでプロ...
-
バッチファイルの作り方(CSV→...
-
[Perl]ファイル出力のエンコー...
-
JSP URLに表示される拡張子 .jsp
-
Windowsで複数のファイルを同じ...
-
【エクセル】改行無しテキスト...
-
1行がやたら長いテキストをバッ...
-
エディターでは改行なのにメモ...
-
batファイルでrenameができませ...
-
Perl で ディレクトリ及びサブ...
-
重複するデータを抽出できる秀...
-
FindFirstFileとFindNextFileで...
-
エラー 'dir.h' : No such fi...
-
空白を含むディレクトリにある...
-
C言語で特定の行を抽出する方法...
-
C++でのテキストファイル読み込...
-
fgets で値が取得できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
改行コードが勝手に
-
このスクリプトの意味を教えて...
-
レコードの書込み判断
-
携帯でのカウンタ
-
map関数についての質問です
-
perlのflock関数でロックをかけ...
-
cgiでdocument.writeの書き出し
-
GD.pmで作成した画像を保存する...
-
マッチ演算子に変数をはさんで...
-
GDモジュールについて
-
プログラムのヒントを下さい
-
DBMオープン時の警告
-
where can I buy snowbord in t...
-
perlの最適化に取り組む際のa.o...
-
Perl変数から外部プログラムの...
-
Perlの書き方
-
HTMLから自動的に文章取得
-
cgiの投票回数制限設定について...
-
perlを用いた特定文字列間の抽...
おすすめ情報