version 1.1, 2001/10/31 03:00:10
|
version 1.4, 2002/01/13 00:32:12
|
Line 1
|
Line 1
|
#!/usr/local/bin/perl -w
|
#!/usr/local/bin/perl -w |
|
|
=head1 NAME
|
=head1 NAME |
|
|
dump2dump.pl - Скрипт для преобразования номеров вопросов в дампе,
|
dump2dump.pl - Скрипт для преобразования номеров вопросов в дампе, |
созданном скриптом dumpRS.pl, используя таблицы, созданные скриптом
|
созданном скриптом dumpRS.pl, используя таблицы, созданные скриптом |
dumpin2out.pl. У обработанных вопросов устанавливает ProcessedBySearch=1
|
dumpin2out.pl. У обработанных вопросов устанавливает ProcessedBySearch=1 |
(loaddump уже не бует обладать этой информацией)
|
(loaddump уже не бует обладать этой информацией) |
|
|
|
|
=head1 SYNOPSIS
|
=head1 SYNOPSIS |
|
|
dump2dump.pl input output oldtable newtable
|
dump2dump.pl input output oldtable newtable |
|
|
|
|
=head1 AUTHOR
|
=head1 AUTHOR |
|
|
Роман Семизаров
|
Роман Семизаров |
|
|
|
|
=cut
|
=cut |
|
|
|
use lib "../lib"; |
use dbchgk;
|
use dbchgk; |
|
|
open (T2, $ARGV[3]) or die "3: Can not open ". $ARGV[3];
|
open (T2, $ARGV[3]) or die "3: Can not open ". $ARGV[3]; |
|
|
open (OUTTABLE, ">d423JX2");
|
open (OUTTABLE, ">d423JX2"); |
|
|
print "loading new table\n";
|
print "loading new table\n"; |
|
|
while (<T2>)
|
while (<T2>) |
{
|
{ |
($id,$name)=split;
|
($id,$name)=split; |
$temp{$name}=$id;
|
$temp{$name}=$id; |
}
|
} |
|
|
print "loading old table\n";
|
print "loading old table\n"; |
open (T1, $ARGV[2]) or die "2: Can not open ". $ARGV[2];
|
open (T1, $ARGV[2]) or die "2: Can not open ". $ARGV[2]; |
|
|
while (<T1>)
|
while (<T1>) |
{
|
{ |
($in,$out)=split;
|
($in,$out)=split; |
$id{$in}=$temp{$out};
|
$id{$in}=$temp{$out}; |
}
|
} |
|
|
#%temp=undef;
|
#%temp=undef; |
|
|
close(T1);
|
close(T1); |
close(T2);
|
close(T2); |
|
|
|
|
|
|
open (DUMP1, $ARGV[0]) or die "0: Can not open ". $ARGV[0];
|
open (DUMP1, $ARGV[0]) or die "0: Can not open ". $ARGV[0]; |
binmode(DUMP1);
|
binmode(DUMP1); |
open (DUMP2, ">".$ARGV[1]) or die "1: Can not open ". $ARGV[1];
|
open (DUMP2, ">".$ARGV[1]) or die "1: Can not open ". $ARGV[1]; |
binmode(DUMP2);
|
binmode(DUMP2); |
|
|
print "getting and writing dump\n";
|
print "getting and writing dump\n"; |
while (read(DUMP1, $w,4))
|
while (read(DUMP1, $w,4)) |
{
|
{ |
print "$sch...\n" unless (++$sch%100);
|
print "$sch...\n" unless (++$sch%100); |
read(DUMP1,$l,4);
|
read(DUMP1,$l,4); |
read(DUMP1,$q,unpack("L",$l));
|
read(DUMP1,$q,unpack("L",$l)); |
$q=~s/(.)(..)(.)/$1.pack("S",$id{unpack("S",$2)}).$3/sge;
|
$q=~s/(.)(..)(.)/$1.pack("S",$id{unpack("S",$2)}).$3/sge; |
|
|
print DUMP2 $w,$l,$q;
|
print DUMP2 $w,$l,$q; |
}
|
} |
|
|
close (DUMP1);
|
close (DUMP1); |
close (DUMP2);
|
close (DUMP2); |
|
|
print "Setting ProcessedBySearch...\n";
|
print "Setting ProcessedBySearch...\n"; |
|
|
|
|
$sch=0
|
$sch=0; |
foreach my $id (values %id)
|
foreach my $id (values %id) |
{
|
{ |
print " $sch...\n" unless (++$sch%100);
|
print " $sch...\n" unless (++$sch%100); |
mydo("update Questions set ProcessedBySearch=1 where QuestionId=$id");
|
mydo("update Questions set ProcessedBySearch=1 where QuestionId=$id"); |
}
|
} |
|
|
|
|
|
|
|
|
|
|
sub s
|
sub s |
{
|
{ |
my $a=shift;
|
!!!! Ne doizmeneno!!!!!!!!! |
my $unpacked=unpack("S",$a);
|
my $a=shift; |
$unpacked=$id{$unpacked};
|
my $unpacked=unpack("L",$a); |
my $packed=pack("S",$unpacked);
|
my $field=$unpacked && 0xF; |
$packed;
|
$unpacked=$id{(($unpacked & 0xF0) << 12) + $unpacked & 0xFFFF}; |
}
|
my $packed=$field | $unpacked & 0xF0) << 12) + $unpacked & 0xFFFF); |
|
$packed; |
|
} |