use Tk; use Tk::FileSelect; use File::Find; use Cwd; use Tk::Button; use Tk::Checkbutton; use locale; use Win32::ODBC; use File::Copy; use Cwd; $directoriprograma=getcwd; $idorigen="C:"; $stabtxt=0; $sfd=0; $tabtxt=""; $memofd=""; $text1="Llengua original"; $text2="Llengua destí"; $mw = MainWindow->new(); $mw->title ("tabtxt2memoFD v0 (06/2005)"); $mw->Button(-text => 'TAB TXT', -width => 20, -command => sub{seleccionar_tabtxt()})-> grid (-row => 0, -column => 0); $mw -> Entry(-width=>40, -textvariable=>\$tabtxt, -justify=>'right') -> grid(-row => 0, -column => 1); $mw->Button(-text => 'memoFD', -width => 20, -command => sub{seleccionar_memofd()})-> grid (-row => 1, -column => 0); $mw -> Entry(-width=>40, -textvariable=>\$memofd, -justify=>'right') -> grid(-row => 1, -column => 1); $mw->Button(-text => 'Exportar', -width => 20, -command => sub{exportar()})-> grid (-row => 2, -column => 0); $mw->Checkbutton ( variable => \$invertir, -justify=>'right', -text => 'Invertir')->grid (-row => 2, -column => 1); MainLoop(); sub seleccionar_tabtxt { $stabtxt=1; $tabtxt= $mw->getOpenFile(-defaultextension => ".txt", -filetypes => [['txt', 'txt' ], ['Tots els fitxers', '*', ], ], -initialdir => $idorigen, -initialfile => "", -title => "Seleccionar fitxer separat per tabuladors", ), @campsido=split(/\//,$tabtxt); $nomarxiutxt=pop(@campsido); $directoriarxiutxt=join("\\",@campsido); $idorigen=$directoriarxiutxt; } sub seleccionar_memofd { $sfd=1; $memofd= $mw->getSaveFile(-defaultextension => ".mdb", -filetypes => [['Memòria de FD', 'mdb' ], ['Tots els fitxers', '*', ], ], -initialdir => $idorigen, -initialfile => "", -title => "Seleccionar memòria de Foreign Desk", ), @campsido=split(/\//,$memofd); $nommemoriafd=pop(@campsido); $directorimemoriafd=join("\\",@campsido); $idorigen=$directorimemoriafd; } sub exportar() { if ($stabtxt==0){warning("Error","Cal indicar una memòria de traducció de DVX","Acceptar")} elsif ($sfd==0){warning("Error","Cal indicar una memòria de traducció de FD","Acceptar")} #llegim el fitxer original open(IN,$tabtxt)||die; %memo=(); #ara s'ha de crear la base de dades de foreign desk #copiem la empty a la ubicació final i amb el nom final per després obrir-la $rutafinal=$directorimemoriafd."\\".$nommemoriafd; copy("$directoriprograma/emptyfd.mdb", $rutafinal); $DriverType = "Microsoft Access Driver (*.mdb)"; $DSN = "Win32 ODBC --MAOmaoMAOmaoMAO--"; $Dir = $directorimemoriafd; $DBase = $nommemoriafd; Win32::ODBC::ConfigDSN(ODBC_ADD_DSN, $DriverType,("DSN=$DSN", "Description=MAO Win32 ODBC Test DSN for Perl", "DBQ=$Dir\\$DBase", "DEFAULTDIR=$Dir", "UID=", "PWD=")) or die "ConfigDSN(): Could not add temporary DSN" . Win32::ODBC::Error(); $db2=new Win32::ODBC($DSN) or die "couldn't ODBC $DSN because ", Win32::ODBC::Error(), "\n"; $cont=1; while () { chomp; ($s1,$s2)=split(/\t/); $s1{$cont}="'".$s1."'"; $s2{$cont}="'".$s2."'"; if ($invertir) { $db2->Sql("INSERT INTO Fuzzy (SourceText,TargetText) VALUES ($s2{$cont},$s1{$cont})"); } else { $db2->Sql("INSERT INTO Fuzzy (SourceText,TargetText) VALUES ($s1{$cont},$s2{$cont})"); } ++$cont; } } sub warning { my $titol=$_[0]; my $missatge=$_[1]; my $textboto=$_[2]; my $dialog = $mw->DialogBox( -title => $titol, -buttons => [ $textboto]); $dialog->add("Label", , -text => $missatge)->pack; $dialog->Show; } sub text { my $titol=$_[0]; my $missatge=$_[1]; $nf=MainWindow->new(); $nf->title ($titol); my $text=$nf->Text(-width=>80, -height=>40)->pack; $text->insert('0.0',$missatge); }