Perlによるビットアレイのセーブ&ロード
2011-07-12-2
[Programming]
プログラミングメモ。
あとでコピペ&改変して使うためのもの。
■コード
mkbitarray.pl
trybitarray.pl
バイナリファイルの読み込みは、これで良いのか自信無し。
■実行例
- [を] Bloom Filter の動作確認スクリプトを Perl で書いてみました[2011-04-28-3]
あとでコピペ&改変して使うためのもの。
■コード
mkbitarray.pl
#!/usr/bin/perl
use strict;
use warnings;
binmode STDOUT, ":raw";
my $bitarray = "";
while (<>) {
chomp;
my $x = tonum($_);
vec($bitarray, $x, 1) = 1 if defined $x;
}
print $bitarray;
sub tonum {
my ($s) = @_;
return $s if $s =~ /^\d+$/;
my $rv = 0;
foreach my $c (split(//, $s)) {
$rv = ($rv * 103 + ord($c)) % 1374;
}
return $rv;
}
trybitarray.pl
#!/usr/bin/perl
use strict;
use warnings;
my $fn = shift @ARGV;
open(my $fh, "<:raw", $fn) or die;
my $bitarray;
read $fh, $bitarray, -s $fn;
close($fh);
while (<>) {
chomp;
my $x = tonum($_);
if (vec($bitarray, $x, 1)) {
print "yes\n";
} else {
print "no\n";
}
}
sub tonum {
my ($s) = @_;
return $s if $s =~ /^\d+$/;
my $rv = 0;
foreach my $c (split(//, $s)) {
$rv = ($rv * 103 + ord($c)) % 1374;
}
}
バイナリファイルの読み込みは、これで良いのか自信無し。
■実行例
% cat test.txt 1234567 1500020 2431124 7777777 9876543 % ./mkbitarray.pl test.txt > test.ba % ./trybitarray.pl test.ba test.txt yes yes yes yes yes yes % ./trybitarray.pl test.ba 1 no 1234567 yes 2345 no 7777777 yes
関連
- [を] Perl の vec() で bit vector の操作[2011-04-02-4]- [を] Bloom Filter の動作確認スクリプトを Perl で書いてみました[2011-04-28-3]
この記事に言及しているこのブログ内の記事
