namazu-ml(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: namazu-1.4.0.0-beta-1
- From: Rei FURUKAWA <furukawa@xxxxxxxxxxxxxxxx>
- Date: Fri, 5 Mar 1999 12:29:52 +0900 (JST)
古川です。
>> On Wed, 3 Mar 1999 17:15:47 +0900, takehi-s@xxxxxxxxxxx (SHIOZAKI Takehiko) said:
> これでいろいろと試して、結論が出ました。
> Perl5.004_01の不具合
> ですね。
ともかくよかったよかった、という気持ちです。
> という風に速くなったのは素晴らしいことですね。今回完走したのでも
まあ、もとのが悪かっただけなわけですが。
>> On Thu, 04 Mar 1999 17:09:15 +0900, Satoru Takabayashi <ccsatoru@xxxxxxxxxxxxxxxxxx> said:
> Rei FURUKAWA <furukawa@xxxxxxxxxxxxxxxx> wrote:
>> 前回のは死ぬ (規模のデータに到達する) までに 9 時間近くかかっているの
>> に、今回は 30 分くらいですね。やはり、ちゃんと (un)pack を使うと、効果
>> がありますね。ってあたりまえか…
> どうせ v1.4 の mknmz は require 5.004 なんだし、 gcnmz でも
> require 5.004 にして自前の packw, unpackw を廃止しても良いの
> ではないでしょうか?
そのうち廃止しようとは思っています。
# いつ? -> 私のまわりから、5.003 が消えたら (そんなに遠くないでしょう)
ところで、今回の pack 'w' 化 (というよりも実は 'N' 統一化) のメリットと
して、「データベースを違うマシンで更新できるようになった」のが、私には、
とても便利で、ありがたいです。
私のところには、SunOS(SPARC) と FreeBSD(Pentium) のマシンが混在している
のですが、今までは、最初に Sun でインデックスを作ったら、その後の更新も
必ず Sun でやらなければなりませんでした。
----------------------------------------------------------------------
wdnmz の pack 'w' 対応をしてみました。必要性はともかく、デバッグ・検証
には役立つかもしれません。
------------------------------ ここから ------------------------------
#! @PERL@
#
# wdnmz - program to output words list from index
# Version 1.0.8 [02/13/1999]
#
# Copyright (C) 1997-1999 Satoru Takabayashi All rights reserved.
# This is free software with ABSOLUTELY NO WARRANTY.
#
$VERSION = "1.0.8";
$COPYRIGHT = "Copyright (C) 1997-1998 Satoru Takabayashi All rights reserved.";
$SYSTEM = $^O;
$LANGUAGE = "%OPT_LANGUAGE%"; # language of messages
$USAGE = <<EOFusage;
wdnmz v$VERSION - program to output list of words from index
$COPYRIGHT
usage: wdnmz [-iw] NMZ.i
(default): 'word' TAB 'count of the word in index'
-w: output list of words for regex search
-i: using NMZ.ii to process
usually use: % wdnmz -w NMZ.i > NMZ.w)
EOFusage
main();
sub main {
while ($ARGV[0] =~ /^-/) {
$opt_wordlist = 1 if $ARGV[0] =~ /w/;;
$opt_with_nmz_ii = 1 if $ARGV[0] =~ /i/;;
shift(@ARGV);
}
die &usage if @ARGV == 0;
$OBJFILE = shift (@ARGV);
open(OBJFILE, $OBJFILE) || die "Can't open $OBJFILE!\n";
binmode(OBJFILE);
&getintsize;
if ($opt_with_nmz_ii) {
open(IDXFILE, $OBJFILE . "i") || die "Can't open $OBJFILEi!\n";
binmode(IDXFILE);
while (read(IDXFILE, $idx, $INTSIZE)) {
$idx = unpack("N", $idx);
seek(OBJFILE, $idx, 0);
$_ = <OBJFILE>;
chop;
if ($opt_wordlist) {
Print("$_\n");
} else {
$nn = '';
while ($c = getc OBJFILE, $nn .= $c, ord($c) & 0x80){}
read(OBJFILE, $buf, unpack('w', $nn));
$nn = (@tmp = unpack('w*', $buf)) / 2;
Print("$_\t$nn\n");
}
}
} else {
while(<OBJFILE>) {
chop;
$nn = '';
while ($c = getc OBJFILE, $nn .= $c, ord($c) & 0x80){}
read(OBJFILE, $buf, unpack('w', $nn));
$nn = (@tmp = unpack('w*', $buf)) / 2;
if ($opt_wordlist) {
Print("$_\n");
} else {
Print("$_\t$nn\n");
}
<OBJFILE>;
}
}
}
sub Print () {
my ($str) = @_;
if ($LANGUAGE eq "ja" && ($SYSTEM eq "MSWin32") || ($SYSTEM eq "os2")) {
$str = eucjp_to_shiftjis($str);
}
print $str;
}
sub usage () {
print STDERR $USAGE;
exit;
}
# checke the size of int
sub getintsize {
$tmp = 0;
$tmp = pack( "I", $tmp );
$INTSIZE = length( $tmp );
}
sub eucjp_to_shiftjis ($) {
my ($str) = @_;
$str =~ s/([\xa1-\xfe])([\xa1-\xfe])/etos($1, $2)/ge;
return $str;
}
sub etos($) {
my($c1, $c2) = @_;
$c1 = ord($c1) & 0x7f;
$c2 = ord($c2) & 0x7f;
if ($c1 & 1) {
$c1 = ($c1 >> 1) + 0x71;
$c2 += 0x1f;
$c2++ if $c2 >= 0x7f;
} else {
$c1 = ($c1 >> 1) + 0x70;
$c2 += 0x7e;
}
$c1 += 0x40 if $c1 > 0x9f;
return chr($c1) . chr($c2);
}
------------------------------ ここまで ------------------------------
--
ヤマハ(株)ピアノプレーヤ設計課
古川 令
furukawa@xxxxxxxxxxxxxxxx