2011年6月16日木曜日

開発環境

  • Mac OS X Snow Leopard (OS)
  • TextWrangler(Text Editor) (いずれはBBEditを入手したい!)
  • Script言語:Perl

『初めてのPerl 第5版』(Randal L. Schwartz, Tom Phoenix, brian d foy 共著、近藤 嘉雪 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-427-9) の9章(正規表現によるテキスト処理), 9.6(練習問題)、3を解いてみる。

 

3.

やり方の1つ。(「やり方は何通りもある」(TIMTOWTDI(There Is More Than One Way To Do It.)))

コード(TextWrangler)

#!/usr/bin/perl
use strict;
use warnings;

my $infile=$ARGV[0];
my $outfile=$infile;
$outfile=~s/(\.\w+)?$/.out/;

open(INFILE,"<$infile");
open(OUTFILE,">$outfile");

while(<INFILE>){
    s/Fred/kamimuratemp/gi;
    s/Wilma/Fred/gi;
    s/kamimuratemp/Wilma/gi;
 print OUTFILE $_;
}

入出力結果(Ternimal)

sample_txt

sample_text.out

意図したとおりにFredはWilmaに、WilmaはFredに置換成功!(大文字小文字は区別せず)

上記のコードでは、一時的に置換する変数に、kamimuratempを利用したけど、解答をみるとchompで改行(\n)を削除してから一時的に格納する変数に改行(\n)を使用し、最後の出力で削除した改行(\n)を追加してた。kamimuratempという文字列が文章中に現れることがないと考えたけど、chomp、改行(\n)を使う方法の方がより一般的に通用しそう。(ちなみに\nではなくヌル文字(\0)でもいいみたい。この場合はchompで改行(\n)削除する必要ないのかな)

気になったので、chompと\nを使うのと、\0を使うので両方試したら、上記のkamimuratempを使ったのと同様な結果が得られた!

ファイルの用意が必要な場合はO'Reilly Japan - 初めてのPerl 第5版の関連ファイルのプログラム例に含まれているものを使用しています。

0 コメント:

コメントを投稿