Hola Josep, he llegit el correu despr�s d'haver enviat l'anterior. M'he
mirat molt per sobre (est� molt ben documentada i t� fins l'�ltim
detall) la seq��ncia del Xavier. No s� si est� plantejat diferent o no
ho s� veure, per� crec que no hi ha implementat un criteri per dividir
que sigui agrupar per """seccions""". La import�ncia d'aquest criteri
l'he intentat explicar al correu anterior, tot i que nom�s era una
proposta.

Qu� us sembla a vosaltres ?

Xavier: La seq��ncia que proposes implementa el que comentava ? ..Ho
implementa impl�citament pq les cadenes del .po segueix un ordre per
""seccions""" (independentment de si despr�s queda tallat pel n�mero de
l�nies especificat com a argument de la seq��ncia). Si no �s el cas,
potser et puc donar un cop de m� o si m�s no la idea pq ho puguis
implementar a la teva seq��ncia.



On dl, 2004-01-26 at 14:20, Josep Puigdemont wrote:
> On Mon, 2004-01-26 at 12:47, Enric Balletb� i Serra wrote:
> >     Hola a tots, em sembla perfecte, seria ideal poder partir el fitxer en
> > diversos trossos i assignar-lo a diferents persones, crec que alg� havia
> > dit que tenia un script o alguna cosa semblant per fer-ho, despr�s crec
> 
> Us passo un programa que va fer en Xavier Conde Rueda per partir (i
> ajuntar) fitxers po, molt bo!
> 
> Cal tenir el perl instal�lat. No s� si hi ha una versi� nova, Xavier?
> El mateix programa incorpora ajuda si no li passeu par�metres.
> 
> > que faltaria falta que una o dues persones per revisar els diversos
> > fitxers perqu� quedi una cosa coherent, com ho veus Aleix? tu que ets el
> > que �ltimament est� m�s actiu te'n pot encarregar de coordinar-ho?
> 
> ----
> 

> #!/usr/bin/perl -w
> 
> # Aix� �s programari lliure; podeu redistribuir-lo i/o\n"
> # modificar-lo sota els termes de la Llic�ncia P�blica General GNU tal i\n"
> # com ha estat publicada per la Free Software Foundation; b� sota la\n"
> # versi� 2 de la Llic�ncia.
> #
> # Aquest programa es distribueix amb l'expectativa de que ser� �til
> # per� SENSE CAP GARANTIA; ni tan sols la garantia impl�cita de
> # COMERCIABILITAT o ADEQUACI� PER UN PROP�SIT PARTICULAR. Vegeu la
> # Llic�ncia P�blica General GNU per obtenir-ne
> # m�s detalls.
> # 
> # Copyright 2003 Free Software Foundation
> # Xavier Conde Rueda (xaviconde a eresmas.com)
> 
> # Aquesta fitxer de seq��ncia agafa un fitxer PO (o una part feta amb aquest)
> # fitxer de sequencia) i en fa N trossos, on cada tros t� aproximadament
> # el mateix nombre de cadenes tradu�bles.
> # A m�s, permet agafar m�ltiples fitxers PO fragmentats i fer-ne un complet.
> 
> # Parsegem l'entrada:
> 
> # Quants par�metres d'entrada hi ha?
> 
> $numParam = scalar @ARGV;
> 
> # Qu� vol fer l'usuari:
> # 1. --parts: es separa un fitxer en parts
> # 2. --fusio: es fusionen les parts d'un fitxer
> # 3. No res: escriu l'ajuda
> 
> if ($numParam < 2)
> {
>     &escriuAjuda ();    
> }
> else
> {    
>     if ($ARGV[0] eq "--parts") 
>     {
>         # L'usuari vol tallar un fitxer
> 
>         $numParts = $ARGV[1];
>         
>         if (2 <= (scalar $numParts))
>         {               
>             if (($numParam >= 4) && ($ARGV[2] eq "--entrada"))
>             {
>                 $nomFitxer = $ARGV[3];
>                 print STDERR "Es tallara el fitxer $nomFitxer en $numParts parts\n";
>                 &fesParts ($numParts, $nomFitxer);
>                 
>                 if (($numParam == 5) &&
>                     ($ARGV[4] eq "--esborra"))
>                 {
>                     # No ho esborrar� ben b�, per�
>                     unlink $nomFitxer;
>                     print STDERR "S'ha esborrat el fitxer $nomFitxer\n";
>                 }
>                 
>                 print STDERR "Fet\n";
>             }
>             else
>             {
>                 print STDERR "Heu d'especificar un fitxer d'entrada amb --entrada\n";
>             }
>         }
>         else
>         {
>             print STDERR "Nomes es poden fer 2 o mes parts\n";
>         }
>     }
>     elsif ($ARGV[0] eq "--fusio")
>     {         
>         # Hem d'esborrar els fitxers d'entrada?
>         
>         if ($ARGV[$numParam - 1] eq "--esborra")
>         {
>             pop (@ARGV);
>             $numParam = scalar @ARGV;
>             $esborra = 1;
>         }
>         else
>         {
>             $esborra = 0;
>         }
>         
>         # L'usuari vol fusionar N parts en un fitxer
>         
>         if ($ARGV[$numParam - 2] eq "--sortida")
>         {
>             # S'especifica un fitxer de sortida
>             
>             $sortida = pop (@ARGV);
>             
>             # Traiem els elements que no siguin fitxers
> 
>             pop (@ARGV);
>             shift (@ARGV);
>             
>             # Llista de fitxers que es fusionaran
>             
>             @fitxersParts = @ARGV;    
>             
>             if (scalar @fitxersParts > 1)
>             {
>                 print STDERR "Es fusionaran ", scalar @fitxersParts, " fitxers\n";
>                 &fusionaParts ($sortida, @fitxersParts);
>                 
>                 if ($esborra)
>                 {
>                     print STDERR "S'esborraran els fitxers @fitxersParts\n";
>                     unlink (@fitxersParts);                     
>                 }
>                 
>                 print STDERR "Fet\n";
>             }
>             else
>             {
>                 print STDERR "S'han d'especificar mes d'un fitxer d'entrada\n";
>             }
>         }
>         else
>         {
>             print STDERR "No s'ha especificat cap fitxer amb --sortida\n";
>         }        
>     }
>     else
>     {
>         &escriuAjuda ();
>     }
> }
> 
> # fesParts (numParts, nomFitxer)
> 
> sub fesParts
> {    
>     my $numParts = $_[0];
>     my $nomFitxer = $_[1];
>     my $numCadenesTotals;
> 
>     if (!open ENTRADA, "<$nomFitxer")
>     {
>         print STDERR "No s'ha pogut obrir el fitxer $nomFitxer\n";
>         exit 0;
>     }
>     
>     # Donat que els fitxers PO no son massa grans, es factible
>     # construir una llista i tenir-la en mem�ria per treballar-hi
>     
>     my @entrada = <ENTRADA>;
>     close ENTRADA;
>     
>     # Hem de comptar quants missatges hi ha al fitxer d'entrada
>     
>     foreach $linia (@entrada)
>     {
>         if ($linia=~/^(\s)*msgid(\s)+/)
>         {
>             $numCadenesTotals ++;
>         }
>     }
> 
>     # Tallem els missatges en $numCadenes com a m�xim
>     
>     my $numCadenes;
>     
>     if (($numCadenesTotals % $numParts) == 0)
>     {
>         $numCadenes = $numCadenesTotals / $numParts;
>     }
>     else
>     {
>         $numCadenes = ($numCadenesTotals / $numParts) + 1;
>     }    
>    
>     if ($numCadenes < $numParts)
>     {
>         print STDERR "No hi han suficients missatges per fer $numParts parts\n";
>         exit 0;
>     }
>     
>     # Per a cada part...
>         
>     for (; $numParts != 0; $numParts--)
>     {
>         # Creem un nou fitxer...
>         
>         my $nomFitxerPart = $nomFitxer.".".$numParts;
>         my $textFitxer = "";        
>         
>         # Recorrem el fitxer del final al principi
>         # Trobem $numCadenes vegades (o les que quedin)...
>         
>         for ($i = $numCadenes; 
>             ($numCadenesTotals > 0) && ($i > 0) && (scalar @entrada > 0);
>             $i --, 
>             $numCadenesTotals--)
>         {
>             # ...una cadena traduible 
>             
>             for ($trobada = 0; !$trobada;)
>             {
>                 $linia = pop (@entrada);
>                 $textFitxer = $linia.$textFitxer;
>                 
>                 if ($linia=~/^(\s)*msgid(\s)+/)
>                 {
>                     $trobada = 1;
>                 }
>             }            
>         }        
>         
>         # Quan trobem la darrera cadena traduible, no agafem
>         # els comentaris que pugui tenir (en les altres s�)
>         # Ho fem ara:
>         
>         for ($trobada = 0;
>             !$trobada &&
>             (scalar @entrada) >0; )
>         {
>             $linia = $entrada[(scalar @entrada) - 1];
>             
>             if ($linia=~/^(\s)*#/)
>             {
>                 $textFitxer = (pop (@entrada)).$textFitxer;
>             }
>             else
>             {
>                 $trobada = 1;
>             }
>         }
>         
>         # Ja podem escriure el fitxer de sortida
> 
>         if (!open PART, ">$nomFitxerPart")
>         {
>             print STDERR "No s'ha pogut obrir el fitxer $nomFitxerPart\n";
>             exit 0;            
>         }
>         print PART "$textFitxer";
>         close PART;
>         
>         print STDERR "S'ha escrit el fitxer $nomFitxerPart\n";
>     }
> }
> 
> # fusionaParts ($sortida, @fitxersParts)
> 
> sub fusionaParts()
> {
>     my $sortida = $_[0];
>     my $fitxersParts = \$_[1];
>     my $primer = 0;
>     my @fitxerSortida;
>     
>     # Per a cada fitxer d'entrada...
>     
>     foreach $nomFitxer (@fitxersParts)
>     {
>         if (!open ENTRADA, "<$nomFitxer")
>         {
>             print STDERR "No s'ha pogut obrir el fitxer $nomFitxer\n";
>             exit 0;
>         }
>         my @fitxer = <ENTRADA>;
>         close ENTRADA;
>         
>         # Hem de saber quin �s el primer fitxer pq cont� la cap�alera
>         # No importa que els altres no estiguin ordenats
>         
>         for ($i = 0; $i < (scalar @fitxer - 2) && !$primer; $i ++)
>         {
>             $linia = $fitxer[$i];
> 
>             if ($linia=~/^(\s)*msgid(\s)+""/) 
>             {
>                 # Tenim un candidat a ser cap�alera
>                 
>                 $linia = $fitxer[$i + 1];
> 
>                 if ($linia=~/^(\s)*msgstr(\s)+""/)
>                 {
>                     $primer = 1;
>                     
>                     # Com ha de ser el primer, canviem l'ordre
>                     # de les dues llistes perque el push ho faci b�
>                     
>                     @aux = @fitxerSortida;
>                     @fitxerSortida = @fitxer;
>                     @fitxer = @aux;
>                 }
>             }
>         }
>         
>         # Actualitzem la llista de sortida
>         push (@fitxerSortida, @fitxer);
>     }
> 
>     if (!open SORTIDA, ">$sortida")
>     {
>         print STDERR "No s'ha pogut obrir el fitxer $sortida\n";
>         exit 0;
>     }
> 
>     # Escrivim la llista en la sortida
>     
>     foreach $linia (@fitxerSortida)
>     {
>         print SORTIDA $linia;
>     }
>     
>     close SORTIDA;
> }
> 
> # escriuAjuda ()
> 
> sub escriuAjuda
> {
>     print STDERR "Un fitxer de sequencia per tallar un fitxer PO en N parts\n";
>     print STDERR "en que cada part te aproximadament el mateix nombre de 
> traduccions.\n";
>     print STDERR "\n";    
>     print STDERR "Us: retalla opcio\n";
>     print STDERR "opcio es una d'aquestes dues:\n";
>     print STDERR "--parts numParts --entrada nomFitxer\tSepara el fitxer d'entrada 
> en numParts parts\n";    
>     print STDERR "\t\t\t\tS'afegira l'extensio .1, .2, ..., .numParts\n";
>     print STDERR "\t\t\t\tCompte: es sobreescriuran els fitxers generats\n";
>     print STDERR "--fusio fitxers --sortida nomFitxer\tCrea un unic fitxer dels 
> fitxers d'entrada\n";
>     print STDERR "\t\t\t\tNo cal que els fitxers estiguin ordenats\n";
>     print STDERR "\t\t\t\tCompte: es sobreescriura el fitxer de sortida\n";
>     print STDERR "\n";    
>     print STDERR "El modificador per a --parts es:\n";
>     print STDERR "--entrada nomFitxer\t\tEspecifica un fitxer PO d'entrada.\n";
>     print STDERR "\t\t\t\tNo es pot fer servir l'entrada estandard.\n";
>     print STDERR "El modificador per a --fusio es:\n";
>     print STDERR "--sortida nomFitxer\t\tEscriu la sortida en el fitxer 
> nomFitxer.\n";
>     print STDERR "\t\t\t\tSi s'especifica \"-\", s'escriura el fitxer per la sortida 
> estandard.\n";   
>     print STDERR "\n";    
>     print STDERR "Un modificador final comu a tots dos es:\n";
>     print STDERR "--esborra\t\t\tOpcional. S'esborrara el fitxer PO d'entrada.\n";
>     print STDERR "\t\t\t\tUtil per no tenir duplicats entre parts i subparts.\n";
>     print STDERR "\t\t\t\tNo es recomenable esborrar el PO orginal.\n";
> }


----------------------------------------------------------------
Podeu consultar els arxius d'aquesta llista o canviar la vostra
subscripci� a http://www.softcatala.org/llistes/
----------------------------------------------------------------

Respondre per correu electrònic a