作者: 藤岡和夫
日時: 2004/6/24(22:28)
On Thu, 24 Jun 2004 04:43:02 +0900
dune <FZH01112@...> さんwrote:

> jperl -b にするのが実行前に分かるなら最初から perl を起動
> するわい、って気もしますが、スクリプトの頭に #!jperl -b で
> も ok です。cmd.exe は何もしないけど jperl が解釈してくれ
> ます。

 #!の行を調べるというオプションがありますね。なるほど。

> あとは <description> くらいの長い文字列なら日本語の途中に
> マッチすることはないだろうと考えて index を使うとか。
> 
> sub midstr{
>     my($str,$start,$end) = @_;
>     my $pos1 = index($str,$start);
>     return if $pos1 < 0;
>     $pos1 += length($start);
>     my $pos2 = index($str,$end,$pos1);
>     return if $pos2 < 0;
>     return substr($str,$pos1,$pos2-$pos1);
> }
> 
> while(<>){
>     $_ = midstr($_,"<description>","</description>");
>     print $_,"\n" if defined $_;
> }

 ありがとうございます。入力データの整形も必要ですけど、実際にはこんなの
でよかったりするかも。

if(s/<\/*(.+?)>//g){
  $tag{$1} = $_;
}

 当面の問題はこのような方法でクリアできたようです。問題があるなと思った
ら、マッチング範囲がなるべく短くなるように変えてみるとよいのかもしれませ
ん。

 問題を抽象化して考える本物のプログラマには邪道かもしれませんが(^^;)

> #残念ながら index/substr を使っても速度的なメリットはなかっ
> #たです。正規表現でわしづかみに処理するほうが簡単だし十分速
> #かったりする。

 テキストを加工する場合は、正規表現によるパターンマッチングを使うのが一
番楽ですね。他の方法は使わないのですぐ忘れてしまいます。

藤岡 和夫
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/