use DBI; @months=('000','Jan',"Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct", "Nov","Dec"); open WARN ,"warn"; $fname=shift; $fname=~s/\.txt$//; my($dbh) = DBI->connect("DBI:mysql:chgk", "piataev", "") or die "Can't connect to DB chgk\n"; if (WriteFile($fname)==-1) {print "File?";} sub WriteFile { my ($fname) = @_; my $query= "SELECT Id, Title, Copyright, Info, URL, Editors, EnteredBy, PlayedAt, CreatedAt from Tournaments where FileName=".$dbh->quote("$fname.txt"); $sth=$dbh->prepare($query); $sth->execute; ($Id, $Title, $Copyright, $Info, $URL, $Editors, $EnteredBy, $PlayedAt, $CreatedAt)= $sth->fetchrow; return -1 unless $Id; open (OUT, ">new/$fname.txt"); print OUT "Чемпионат:\n$Title\n\n"; my $date=$PlayedAt; ($year,$month,$day)=split /-/, $date; # $month=0,$date=0 if $year && $month==1 && $day==1; $pdate=sprintf("%02d-%3s-%4d",$day,$months[$month],$year); print OUT "Дата:\n$pdate\n\n" if $date; print OUT "URL:\n$URL\n\n" if $URL; print OUT "Инфо:\n$Info\n\n" if $Info; print OUT "Копирайт:\n$Copyright\n\n" if $Copyright; print OUT "Редактор:\n$Editors\n\n" if $Editors; $query= "SELECT Id, Title, Copyright, Editors from Tournaments where ParentId=$Id order by Id"; $sth=$dbh->prepare($query); $sth->execute; while (($tourid,$tourtitle,$cright,$editor)=$sth->fetchrow,$tourid) { # $text{$tourid}="Тур:\n$tourtitle\n\n"; $query= "SELECT * from Questions where ParentId=$tourid order by QuestionId"; $sth1=$dbh->prepare($query); $sth1->execute; push(@tours,$tourid); $tourtitle{$tourid}=$tourtitle; $copyright{$tourid}=$cright; $editor{$tourid}=$editor; $vid=''; $author=''; $eqauthor=1; $qnumber=0; while (@arr=$sth1->fetchrow, $arr[0]) { my($i, $name) = 0; $qnumber++; foreach $name (@{$sth1->{NAME}}) { $arr[$i]=~s/^(.*?)\s*$/$1/; $Question{$tourid}[$qnumber]{$name} = $arr[$i++]; } if ($vid) { if ($vid ne $Question{$tourid}[$qnumber]{'Type'}) {print WARN "Warning: Different types for Tournament $tourid\n"} } else { $vid=$Question{$tourid}[$qnumber]{'Type'}; } if ($author) { if ($author ne $Question{$tourid}[$qnumber]{'Authors'}) { $eqauthor=0; } } else { $author=$Question{$tourid}[$qnumber]{'Authors'}; $eqauthor=0 unless $author; } } $vid{$tourid}=$vid; $qnumber{$tourid}=$qnumber; $author{$tourid}=$eqauthor ? $author : ''; } $vid=''; $eqvid=1; $eqauthor=1; foreach (@tours) { $vid||=$vid{$_}; if ($vid{$_} ne $vid) { $eqvid=0; } $author||=$author{$_}; if (!$author{$_} || ($author{$_} ne $author)) { $eqauthor=0; } } print OUT "Вид:\n$vid\n\n" if $eqvid; print OUT "Автор:\n$author\n\n" if $eqauthor; foreach $tour(@tours) { print OUT "Тур:\n$tourtitle{$tour}\n\n"; print OUT "Вид:\n$vid{$tour}\n\n" if !$eqvid; print OUT "Копирайт:\n$copyright{$tour}\n\n" if $copyright{$tour} && ($copyright{$tour} ne $Copyright); print OUT "Редактор:\n$editor{$tour}\n\n" if $editor{$tour} && ($editor{$tour} ne $Editors); $tourauthor=0; if (!$eqauthor && $author{$tour}) { print OUT "Автор:\n$author{$tour}\n\n"; $tourauthor=1; } foreach $q(1..$qnumber{$tour}) { print OUT "Вопрос $q:\n".$Question{$tour}[$q]{'Question'}."\n\n"; print OUT "Ответ:\n".$Question{$tour}[$q]{'Answer'}."\n\n"; print OUT "Автор:\n".$Question{$tour}[$q]{'Authors'}."\n\n" if !$tourauthor && !$eqauthor && $Question{$tour}[$q]{'Authors'}; print OUT "Комментарий:\n".$Question{$tour}[$q]{'Comments'}."\n\n" if $Question{$tour}[$q]{'Comments'}; print OUT "Источник:\n".$Question{$tour}[$q]{'Sources'}."\n\n" if $Question{$tour}[$q]{'Sources'}; print OUT "Рейтинг:\n".$Question{$tour}[$q]{'Rating'}."\n\n" if $Question{$tour}[$q]{'Rating'}; } } close OUT; }