Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 結果の日付順ソート



山下@リムネットです。

yw3t-trns@xxxxxxxxxxxxxxx さんは、06/15 04:25頃
題名 [namazu-users-ja] Re: 結果の日付順ソート
で書きました。

>こちらはもしかすると mailutime を使っていないために、うまくいって
>いないのかもしれません。(未確認)

 mailutime を使えばよいことですが、個人的には最初から Date: ヘッダをイ
ンデックスに書き込んでくれてもいいかなと思っています。その後、ファイルが
改竄されても無視されますが。
 というわけで、自作ソフトには、mailnews.pl と mailutime を混ぜたフィル
タを添付しています。

 検索結果の並び替えには --sort=field:Date を使っています。


***************
*** 121,126 ****
--- 121,129 ----
    		$partial = $1;
    		util::dprint("((partial: $partial))\n");
  	    }
+ 	} elsif ($line =~ s/^date:\s*//i){
+ 	    my $hdate = formatdate($line);
+ 	    $fields->{'date'} = $hdate;
  	} elsif ($line =~ /^(\S+):\s*(.*)/i) {
  	    my $name = $1;
  	    my $value = $2;
***************
*** 292,297 ****
--- 295,373 ----
          $uuin = 0;
          $$content .= $line;
      }
+ }
+ 
+ #format the date to 'yyyy/mm/dd(www) hh:nn:ss'
+ sub formatdate ($)
+ {
+     #Japanese
+     my %week_names = ("Sun" => "日", "Mon" => "月", "Tue" => "火", 
+                "Wed" => "水", "Thu" => "木", "Fri" => "金", "Sat" => "
土");
+     my $re_week = '(Sun|Mon|Tue|Wed|Thu|Fri|Sat)';
+     my %month_names = ("Jan" => 1, "Feb" => 2, "Mar" => 3, "Apr" => 4, 
+                "May" => 5, "Jun" => 6, "Jul" => 7, "Aug" => 8, 
+                "Sep" => 9, "Oct" => 10, "Nov" => 11, "Dec" => 12);
+     my $re_month =  join '|', keys %month_names;
+     my $re_day   =  '(?:0?[1-9]|[12][0-9]|3[01])';
+     my $re_year  =  '(?:\d\d\d\d)';
+     my $re_hour  =  '(?:[01][0-9]|2[0-3])';
+     my $re_min   =  '(?:[012345][0-9])';
+     my $re_sec   =  '(?:[012345][0-9])';
+ 
+     my ($orig_str) = @_;
+     my $str = $orig_str;
+     my ($sec, $min, $hour, $mday, $mon, $year, $wday);
+     my ($mtime);
+ 
+     # remove a timezone adjustment such as '+0900'
+     $str =~ s/(\+\d+)//;
+     # remove week day
+     if ($str =~ s/\b($re_week)\b//i) {
+       #English
+       $wday = $1;
+       #Japanese
+       #$wday = $week_names{$1};
+     } else {
+       $wday = "???";
+     }
+ 
+     # get hour, min and sec.
+     if ($str =~ s/\b($re_hour):($re_min):($re_sec)\b//) {
+ 	$hour = $1;
+ 	$min  = $2;
+ 	$sec  = $3;
+     } else {
+ 	$hour = 0;
+ 	$min  = 0;
+ 	$sec  = 0;
+     }
+ 
+     # get a month
+     if ($str =~ s/\b($re_month)\b//i) {
+ 	$mon = $month_names{$1};
+     } else {
+ 	$mon = 0;
+     }
+ 
+     # get a year
+     if ($str =~ s/\b($re_year)\b//i) {
+ 	$year = $1;
+     } else {
+ 	$year = 1970;
+     }
+ 
+     # get a day
+     # this SHOULD be tried at the last.
+     if ($str =~ s/\b($re_day)\b//i) {
+ 	$mday = $1;
+     } else {
+ 	$mday = 0;
+     }
+ 
+     $mtime = sprintf("%d/%.2d/%.2d(%s) %.2d:%.2d:%.2d", 
+ 		   $year, $mon, $mday, $wday, $hour, $min, $sec);
+ 
+     return $mtime;
  }
  
  

+---------------------------------+
 !  山下 誠二   S.Yam(えすやむ) !
  !  E-mail: s_yam@xxxxxxxxxxxx !
   +---------------------------+