🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #7699

Re: "Transponer" u fichero de texto.

#7699
From: Reinoso G.
Date: Fri, 07 Feb 2003 17:21
62 lines
3761 bytes
 El otro d�a, Han Solo nos estuvo contando:
> [transponer un fichero]
> Estoy programando un script en perl, pero me est� quedando de un
> guarro que asusta.

�En 30 l�neas te vale?

Estaba aburrido y me he puesto a hacerlo. No queda tan guarro con un par 
de trucos:


------------------------------
#!/usr/bin/perl -w

$separador = " ";

while (<>)                             # Para cada l�nea:
{
    chop;
    @mat = split /$separador/,$_;      # Dividimos la l�nea
    for ($i=0; $i<@mat; $i++)          # Para cada elemento:
    {                                  # La matriz n es un �ndice que
                                       # cuenta los elentos que hay en cada
                                       # dimensi�n de mattr.
        defined $n[$i] or $n[$i] = 0;  # Cuenta que iniciamos en 0.
        $mattr[$i][$n[$i]] = $mat[$i]; # Llenamos la matriz principal por
                                       # columnas. mattr tiene 2 dimensiones.
        $n[$i]++;
    }
}

foreach (@mattr)                       # Ahora la escribirmos por filas
{
    @tmp = @{$_};                      # Los elementos de la 2� dimensi�n son
                                       # referencias a matriz (punteros).
    foreach (@tmp)
    {
        print $_.$separador;
    }
    print "\n";
}
-----------------------

El asunto es llenar la matriz en columnas y escribirla por filas. Para eso 
se usa la matriz $mattr ($mat transpuesta). Como cada elemento es una 
referencia se desreferencia. Los dos foreach anidados son para dar 
formato. Se habr�a conseguido lo mismo fijando $" = $separador y omitiendo 
el foreach interior. Pero eso es ya lo de menos. Se puede hacer m�s 
compacto, pero se entiende peor.

�chale un ojo y aseg�rate de que lo entiendes antes de usarlo, que no est� 
bien dar las cosas ya hechas.

Por cierto, hay que llamarlo:  trans fichero    o bien   trans < fichero.

Saludos.

-- 
�������������������������������������������������������������������������
��  Reinoso G.  EA4BAO                      r einoso.bao@wanadoo.e s   ��
��  http://perso.wanadoo.es/reinoso.bao                                ��
������������������������������������������������������������������������� 
Technical Details
Message-ID: <slrnb47qp3.2rv.reinoso@EA4BAO.PLLANO.ESP.EU>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!peer.news.opaltelecom.net!zen.net.uk!news-xfer.cox.net!mainake.escomposlinux.org!lamanonegra.escomposlinux.org!news-7.escomposlinux.org!news
References: <873cn0hz9a.fsf@ietcc.csic.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,197d58af93fd12d4
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2003-02-07 09:23:15 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.icl.net!newsfeed.fjserv.net!peer.news.opaltelecom.net!zen.net.uk!news-xfer.cox.net!mainake.escomposlinux.org!lamanonegra.escomposlinux.org!news-7.escomposlinux.org!news
From: "Reinoso G." <reinoso@probando.com>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: "Transponer" u fichero de texto.
Date: Fri, 7 Feb 2003 18:21:39 +0100
Organization: ecolnet
Lines: 62
Message-ID: <slrnb47qp3.2rv.reinoso@EA4BAO.PLLANO.ESP.EU>
References: <873cn0hz9a.fsf@ietcc.csic.es>
Reply-To: rei noso.bao@wanadoo.e s
NNTP-Posting-Host: 62-37-149-51.dialup.uni2.es
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-15
Content-Transfer-Encoding: 8bit
X-Trace: lamanonegra.eg 1044638605 8097 62.37.149.51 (7 Feb 2003 17:23:25 GMT)
X-Complaints-To: foobar@escomposlinux.org
NNTP-Posting-Date: Fri, 7 Feb 2003 17:23:25 +0000 (UTC)
User-Agent: slrn/0.9.7.4 (Linux)