ファイルから読み込んだ全角文字をあるキーワード(例えば"田中")が含んでいるか否かを判定するプログラムをつくりたいのですが、なかなか上手くいきません。ファイルを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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- PDF acrobatでwordファイルをpdfに変換すると文字化けする 3 2023/02/10 09:31
- オープンソース ChatGPTをスプレッドシートと連携して自動でリサーチしたいんですがうまく出来ません。。。 1 2023/05/05 15:59
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
while(<ハンドラ>) {} で行数を...
-
perlで、文字列の中から何番目...
-
オープンしたファイルで行の連結
-
ファイルから読み込んだ文字を
-
perlのflock関数でロックをかけ...
-
close()で例外が投げられる理由
-
AutoCADのスクリプト
-
テキストファイルの本文中に行...
-
cgiの投票回数制限設定について...
-
batファイルでrenameができませ...
-
エラー 'dir.h' : No such fi...
-
HTMLのフォームで画像と文...
-
ExcelをCSV書き出す場合のシー...
-
awkスクリプトでダブルクォーテ...
-
Perlの変数に文字数制限(容量...
-
readdir()で得られるファイル・...
-
ファイル全てを .xlsm に変更し...
-
パスから最後のディレクトリだ...
-
テキストデータから指定した1...
-
一定時間が経過したフォルダの削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
perlのflock関数でロックをかけ...
-
改行コードが勝手に
-
巨大ファイルの行をを逆順に並...
-
オープンしたファイルで行の連結
-
Perl で syntax error
-
where can I buy snowbord in t...
-
open中のファイルをrename
-
perlを用いた特定文字列間の抽...
-
Perlで他サイトの情報を取得し...
-
die関数のエラー出力先について
-
ハッシュにファイルハンドル
-
サブスクリプトとのファイルハ...
-
テキストファイルの本文中に行...
-
perlで大容量CSVのsort方法につ...
-
フォルダが開かなくなりました。
-
AutoCADのスクリプト
-
ジョブショップスケジューリング
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
おすすめ情報