¡¡Hola de nuevo!!
Soy mega nueva en este lenguaje. Hasta hace nada iba con los
arrays y ahora ya me estoy lanzando con el "hash".
Sigo jugando y me invento cosas a ver si puedo conseguirlas pues creo que con este lenguaje se puede hacer de todo, jejeje.
Pero voy poco a poco.
A ver si explico bien lo que pretendo.
Antes de nada comentar que he visto los manuales que me indicó explorer del manual en inglés y en español (
http://perldoc.perl.org/perlfaq4.html#H ... r-array%3f) y a pesar de seguirlos, no consigo eliminar los duplicados. Me da que el problema lo tengo en la forma de hacer el bucle, pero tras probar con varios "print" de variables, sigo sin ver dónde está el problema.
Tengo un fichero por bloques:
Using text Syntax Highlighting
11113333444455552222,asdjjdssldl sldksld sldksl
444455556666677778, dfrtrsas lllabbla jjjewe
1234,dgstrs jj.op
4321,uytfg/a
012345678911223344556,fdflstls kktllb qqqqqq dddrrete
98765432199887766554,ñlkjkht sttrvmns c.f.
5643,lloopp ddddddttttt
9087,noseque nosecuantos
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
y así sucesivamente.
Dentro de este fichero inicial ya consigo sacar en otro fichero las primeras líneas de cada bloque, es decir:
Using text Syntax Highlighting
11113333444455552222,asdjjdssldl sldksld sldksl
012345678911223344556,fdflstls kktllb qqqqqq dddrrete
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Bien, pero es que en el fichero inicial, esta primera línea se repite, y quiero que solo la copie en el fichero destino una vez.
Copio el código que he usado (en esta versión lo imprime por pantalla porque me es más sencillo comprobar el resultado).
Using perl Syntax Highlighting
#!/usr/local/bin/perl
use warnings;
use strict;
use autodie;
#use List::MoreUtils qw(uniq);
my $end = "End of File!\n\n";
my $filename = 'fichero.txt';
open my $filehandle, '<', $filename or die $!;
open my $filehandle2, '<', $filename or die $!;
my @array = <$filehandle>;
my @array2 = <$filehandle2>;
my $i=0;
$array[$i] = $.;
print "\n Número de líneas del fichero $filename: $array[$i]\t";
print $end;
for (my $j = 0; $j <= $array[$i]; $j+=5) {
my @unique = ();
my %seen;
foreach my $elem (@array2[$j]) {
#print $array2[$j];
push @unique, $elem if not $seen{$elem}++;
foreach (@unique){
print;
}
}
}
close $filehandle;
close $filehandle2;
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
El resultado que obtengo es: la primera línea de cada bloque pero me salen los repetidos también.
He probado varias opciones del manual del foro y, o pierdo valores o siguen saliendo los repetidos.
¿Alguna sugerencia? ¡Se agradece cualquier ayuda!
¡Muchas gracias!