ChangeLogオプション解析(その3)

続きです。

今回は–authorオプションの機能を追加します。

では、変更後のソースです。

takk@deb9:~$ cat -n t.pl
     1	$_ = "@ARGV";
     2	s/--(\w+-?\w+) /--$1=/g;
     3	$author='.*';
     4	$text='.*';
     5	

3,4行目が追加箇所です。
前回追加したtextオプションと、今回のauthorオプションに関して、デフォルトで全部抽出できるように、.*にしています。

     6	foreach(split / /){
     7		$author=$1 if(/--author=(\S+)/);
     8		$text=$1 if(/--text=(\S+)/);
     9		$exclude=$1 if(/--exclude=(\S+)/);
    10		$from_date=$1 if(/--from-date=(\S+)/);
    11		$to_date=$1 if(/--to-date=(\S+)/);
    12	}
    13	
    14	%log=();
    15	opendir(DIR,".");
    16	@files = grep { /ChangeLog.*/ } readdir(DIR);
    17	closedir(DIR);
    18	
    19	$num = 1;
    20	foreach(@files){
    21		open(INFILE,"<$_");
    22		$id = "";
    23		while(<INFILE>){
    24			chomp();
    25			s/^        /\t/;
    26			if(/^\d\d\d\d\-\d\d\-\d\d/){
    27				$title = "$_";
    28				$num=0;
    29				$id = $title .':::'. $num++;
    30				next;
    31			}
    32			if(/^	\*/){
    33				$id = $title .':::'. $num++;
    34			}

6~34行目、変更なしです。

    35			if(/^	|^	\*|^$/ && $id ne ""){
    36				if(/$text/){
    37					$log{$id} .= "$_";
    38					$found{$id} ++;
    39				}
    40				next;
    41			}
    42			last;

前回のスクリプトでは、$found{$id} ++ if(/$text/);としていたので、指定した文字列のみが表示されていました。オプションなしの場合に何も表示されなくなるので、37,38行目は、if(/$test/)で囲みます。

    43		}
    44	
    45		close(INFILE);
    46	}
    47	
    48	foreach(sort keys %log){
    49		$id = $_;
    50		@tmp = split /\t/,$log{$_};
    51	

43~51行目、変更なしです。

    52		if($found{$id} > 0){
    53			if($id =~ /$author/){
    54				print "$id\n";
    55				foreach(@tmp){
    56					print"	$_\n";
    57				}	
    58				print"\n";
    59			}
    60		}
    61	}
takk@deb9:~$ 

53,59行目に、authorオプションが指定された場合に、判定文を追加しました。これで指定したauthorのログのみ抽出できるようになります。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA