[PHP-users 31159] Re: grepでの文字検索とstrposでの文字検索の違い

Takamori Mitsuki hashibata @ gmail.com
2006年 12月 30日 (土) 08:52:04 JST


こんにちは。高森です。

こちらの環境は
PlamoLinux:2.6.17.13
PHP:5.2.0   です。

データは13Mのtab区切りのCSVデータで、
文字コードはEUCでした。

mb_internal_encoding = EUC-JPも設定されています。

先のコマンドを実行したところ下記の結果となります。

   grep     strpos  mb_strpos
CLI:14136  14260  14147
CGI:14260  14260  14147

違なる部分がどこなのか、を調べてみます。
そうすれば具体的なデータをご呈示できると思います。



06/12/29 に Seiji Masugata<s.masugata @ digicom.dnp.co.jp> さんは書きました:
> こんにちわ、桝形です。
>
> > grepとstrposの比較をするため
> > 文字列から「あ」という文字を検索する
> > プログラムを作成しました。
> >
> > しかしながら同じと思われた検索結果が
> > 微妙に違っています。
> >
> > 原因は、どこにあるのでしょうか?
>
> 以下のプログラムを、そのまま利用して確認してみましたが
> 特に問題は無いようでした(全て同じ件数が出力された)。
>
> Debian GNU/Linux 3.1
> PHP / 4.4.4 5.2.0
>
> データファイルの構成がどうなっているか分かりませんが
> プログラムが実行している文字コードとファイルの文字コードが
> 一致していない、という事はありませんか。
>
> mb_internal_encoding = EUC-JP
> ファイルの文字コード = SJIS
>
> みたいな。
>
> 再現できる、データファイルの構成を教えて頂ければ幸いです。
>
> >
> > <?php
> >
> > // Linuxのgrepコマンド
> > $result_grep = array();
> > exec("grep 'あ' strdata.dat", $result_grep);
> > echo count($result_grep) . "\n";
> >
> > // PHPのstrposコマンド
> > $result_strpos = array();
> > $arr = file("strdata.dat");
> > for ($i=0; $i<count($arr); $i++) {
> >       if (strpos($arr[$i], "あ") !== false) {
> >               $result_strpos[] = $arr[$i];
> >       }
> > }
> > echo count($result_strpos) . "\n";
> >
> > // PHPのstrposコマンド
> > $result_strpos = array();
> > $arr = file("strdata.dat");
> > for ($i=0; $i<count($arr); $i++) {
> >       if (mb_strpos($arr[$i], "あ") !== false) {
> >               $result_strpos[] = $arr[$i];
> >       }
> > }
> > echo count($result_strpos) . "\n";
> >
> > ?>
>
> --
> Seiji Masugata <s.masugata @ digicom.dnp.co.jp>
>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>


PHP-users メーリングリストの案内