зеркало из https://github.com/mozilla/pjs.git
70 строки
1.8 KiB
Perl
Executable File
70 строки
1.8 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
######################################
|
|
# Infobot Factoid Import/Export Tool #
|
|
######################################
|
|
|
|
use strict;
|
|
use AnyDBM_File;
|
|
use Fcntl;
|
|
|
|
if (not @ARGV == 2) {
|
|
&use();
|
|
} else {
|
|
my $command = shift @ARGV;
|
|
my $filename = shift @ARGV;
|
|
if ($command eq '-d') {
|
|
&dump($filename);
|
|
} elsif ($command eq '-i') {
|
|
&import($filename);
|
|
} else {
|
|
&use();
|
|
}
|
|
}
|
|
|
|
sub use {
|
|
print "\n";
|
|
print " usage: $0 -d dbname\n";
|
|
print " prints out an ascii flat file of the database listed.\n";
|
|
print " dbname should be the basename of the db, e.g.\n";
|
|
print " $0 -d ../factoids-is > is.fact\n";
|
|
print " $0 -d ../factoids-are > are.fact\n";
|
|
print "\n";
|
|
print " $0 -i dbname\n";
|
|
print " imports an ascii flat file into the database listed.\n";
|
|
print " dbname should be the basename of the db, e.g.\n";
|
|
print " $0 -i ../factoids-is < chemicals.fact\n";
|
|
print " $0 -i ../factoids-is < is.fact\n";
|
|
print " $0 -i ../factoids-are < are.fact\n";
|
|
print "\n";
|
|
exit(1);
|
|
}
|
|
|
|
sub dump {
|
|
my %db;
|
|
tie(%db, 'AnyDBM_File', shift, O_RDONLY, 0666);
|
|
while (my ($key, $val) = each %db) {
|
|
chomp $val;
|
|
print "$key => $val\n";
|
|
}
|
|
}
|
|
|
|
sub import {
|
|
my %db;
|
|
tie(%db, 'AnyDBM_File', shift, O_WRONLY|O_CREAT, 0666);
|
|
while (<STDIN>) {
|
|
chomp;
|
|
unless (m/\s*(.+?)\s+=(?:is=|are=)?>\s+(.+?)\s*$/o) {
|
|
m/\s*(.+?)\s+(?:is|are)?\s+(.+?)\s*$/o;
|
|
}
|
|
if (length($1) and length($2)) {
|
|
if (defined($db{$1})) {
|
|
if (not $db{$1} =~ m/^(|.*\|)\Q$2\E(|.*\|)$/s) {
|
|
$db{$1} .= "|$2";
|
|
}
|
|
} else {
|
|
$db{$1} = $2;
|
|
}
|
|
}
|
|
}
|
|
}
|