Article View: es.comp.os.linux.programacion
Article #7699Re: "Transponer" u fichero de texto.
From: Reinoso G.
Date: Fri, 07 Feb 2003 17:21
Date: Fri, 07 Feb 2003 17:21
62 lines
3761 bytes
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!newsReferences:
<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)