#!/usr/bin/perl -w
=head1 NAME
delRS.pl - скрипт для удаления из дампа таблицы word2question
и таблицы соответствия идентификаторов
информации о вопросах указанного файла (или тура).
=head1 SYNOPSIS
delRS.pl dump table name1 name2 name3 ...
delRS.pl dump table name.tur ...
=head1 AUTHOR
Роман Семизаров
=cut
use lib "../lib";
use dbchgk;
use chgkfiles;
if ($#ARGV<2)
{
print "Usage: delRS.pl dump table name1 name2 name3 ...";
exit;
}
my($dumpname, $tablename, @names)=@ARGV;
open (TABLE, $tablename) or die "0: Can not open ". $tablename;
open (DUMP, $dumpname) or die "0: Can not open ". $dumpname;
binmode(DUMP);
open OUTDUMP, ">tmp1";
binmode(OUTDUMP);
open OUTTABLE, ">tmp2";
open STDERR, ">errors";
while (
)
{
($in,$out)=split;
if (grep $out=~m/^$_\./, @names) {
mydo("Update Questions set ProcessedBySearch=NULL where QuestionId=$in")
}
else {
write OUTTABLE;
$outid{$in}=$out;
}
}
print "getting and writing dump\n";
while (read(DUMP, $w,4))
{
print "$sch...\n" unless (++$sch%100);
read(DUMP,$l,4);
$kvo=unpack("L",$l);
read(DUMP,$q,$kvo);
$q=~s/(.)(..)(.)/&s($1,$2,$3,\$kvo)/sge;
#$q=~s/(.)(..)(.)/$outid{unpack("L",$2)}?$1.$2.$3:''/sge;
$l=pack("L",$kvo);
print OUTDUMP $w,$l,$q;
}
close (DUMP);
close (OUTDUMP);
sub s
{
my ($s1,$s2,$s3,$kvo) = @_;
$unpacked=unpack("S",$s2);
my $id=$outid{$unpacked};
if (!$id) {$$kvo-=4;return ""} else {return "$s1$s2$s3"}
# $outid{unpack("L",$s2)} ? $s1.$s2.$s3:''
}
format OUTTABLE =
@<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$in, $out
.