#! /usr/bin/perl use Getopt::Long; GetOptions( "e=s" => \$e, "s=s" => \$s, "help" => \$help); if ($help) { print "Ajuda;\n"; print "Programa TermCat2tabtxt: transforma els arxius XML de Terminologia Oberta del TermCat (www.termcat.net) a un fitxer de text separat per tabuladors. L'estructura del fitxer és:\ncat tab spa tab eng tab fra tab tema tab font\n Els parŕmetres són:\n"; print "--e (string): Fitxer XML d'entrada. Obligatori.\n"; print "--s (string): Fitxer de text tabulat de sortida. Obligatori.\n"; print "--help: mostra aquesta ajuda.\n"; print "Final de l'ajuda";exit; } unless ($e) {print "S'ha d'especificar un fitxer d'entrada. L'opció --help mostra l'ajuda.\n";exit;} unless ($s) {print "S'ha d'especificar un fitxer de sortida L'opció --help mostra l'ajuda.\n";exit;} open(IN,$e)||die "No puc trobar el fitxer d'entrada. Verifica el nom del fitxer $e: $!.\n"; open(OUT,">$s"); %linies=(); while () { chomp; if (//) { escriure(); @en=(); @es=(); @ca=(); @fr=(); $area=""; } elsif (/(.+)<\/areatematica>/) { $area=$1; } elsif (/(.+?)<\/denominacio>/) { $ca=$1; push(@ca,$ca) } elsif (/(.+?)<\/denominacio>/) { $es=$1; push(@es,$es) } elsif (/(.+?)<\/denominacio>/) { $en=$1; push(@en,$en) } elsif (/(.+?)<\/denominacio>/) { $fr=$1; push(@fr,$fr) } } foreach $linia (keys(%linies)) { print OUT "$linia\n"; } sub escriure { foreach $cat (@ca) { $linia="$cat\t$es[0]\t$en[0]\t$fr[0]\t$area\tTermCat"; ++$linies{$linia}; } foreach $spa (@es) { $linia="$ca[0]\t$spa\t$en[0]\t$fr[0]\t$area\tTermCat"; ++$linies{$linia}; } foreach $eng (@en) { $linia="$ca[0]\t$es[0]\t$eng\t$fr[0]\t$area\tTermCat"; ++$linies{$linia}; } foreach $fra (@fr) { $linia="$ca[0]\t$es[0]\t$en[0]\t$fra\t$area\tTermCat"; ++$linies{$linia}; } }