Página 1 de 2

Duda sobre doble bucle foreach

NotaPublicado: 2008-10-15 09:52 @453
por pepex
¡Hola! Quería usar dos archivos de texto y guardarlos en un array.
Entonces cada array manejaría un archivo pero, ¿cómo podría hacer el bucle foreach para no tener que ponerlo y abrirlo dos veces?

Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open (NOMBRES, $nombre);
@nombre = <NOMBRES>;
close(NOMBRES);

open (APELLIDOS, $apellidos);
@apellido = <APELLIDOS>;
close(APELLDIDOS);

foreach $nombres(@nombre){
     foreach $apellidos(@apellido){
         print "$nombre $apellido";
    }
}
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Intenté probar:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open (NOMBRES, $nombre);
@nombre = <NOMBRES>;
close(NOMBRES);

open (APELLIDOS, $apellidos);
@apellido = <APELLIDOS>;
close(APELLDIDOS);

foreach $nombres(@nombre) && $apellidos(@apellido){
         print "$nombre $apellido";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

pero nada :(

Espero que puedan echar una mano.

NotaPublicado: 2008-10-15 10:00 @458
por explorer
Bienvenido a los foros de Perl en Español, pepex.

No lo entiendo muy bien, pero parece que quieres hacer corresponder cada nombre con su apellido.

Se podría entonces hacer un bucle for $i (0 .. $#nombre) y así puedes ir recorriendo los índices de @nombre y @apellidos, con lo que puedes mostrar uno al lado del otro.

P.D. Esta es una respuesta del foro Intermedio ;)

NotaPublicado: 2008-10-15 10:09 @464
por pepex
Lo que quiero es abrir dos archivos (uno con nombres, otro con apellidos) separados, una variable corresponde a usuario y otra a password, lo que quería saber es si podría reducir el code y en vez de usar dos bucles foreach, hacerlo en uno.

Saludos y gracias por responder.

NotaPublicado: 2008-10-15 10:35 @482
por explorer
Sí, con el código que te he indicado antes puedes hacerlo en un solo bucle.

NotaPublicado: 2008-10-15 10:56 @497
por pepex
No me funciona así, ¿no se podría hacer de otra manera con foreach?

Saludos.

NotaPublicado: 2008-10-15 11:09 @506
por explorer
for es lo mismo que foreach. ¿Qué error te da?

Muestra el código que estás usando...

NotaPublicado: 2008-10-15 11:36 @525
por pepex
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
open (NOMBRES, 'nombres.txt');
@nombre = <NOMBRES>;
close(NOMBRES);

open (APELLIDOS, 'apellidos.txt');
@apellido = <APELLIDOS>;
close(APELLDIDOS);

foreach $nombre(@nombre){
        chomp $nombre;
     foreach $apellido(@apellido){
                chomp $apellido;
         print "$nombre => $apellido\n";
    }
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


nombres.txt:
pedro
rosa
antonio


apellidos.txt:
garcia
martinez
soria


salida:

Código: Seleccionar todo
# perl prueba.pl

pedro => garcia
pedro => martinez
pedro => soria
rosa => garcia
rosa => martinez
rosa => soria
antonio => garcia
antonio => martinez
antonio => soria



Saludos.

NotaPublicado: 2008-10-15 11:48 @533
por explorer
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

open (NOMBRES, 'nombres.txt');
my @nombre = <NOMBRES>;
chomp @nombre;
close(NOMBRES);

open (APELLIDOS, 'apellidos.txt');
my @apellido = <APELLIDOS>;
chomp @apellido;
close(APELLIDOS);

for my $i ( 0 .. $#nombre ) {
    print "$nombre[$i] => $apellido[$i]\n";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
sale:
Código: Seleccionar todo
pedro => garcia
rosa => martinez
antonio => soria

NotaPublicado: 2008-10-15 11:56 @538
por pepex
Ajá, pero lo que interesa es que salga cada nombre con todos los apellidos.
tipo:

Código: Seleccionar todo
pedro => garcia
pedro => martinez
pedro => soria
rosa => garcia
rosa => martinez
rosa => soria
antonio => garcia
antonio => martinez
antonio => soria


Gracias y saludos.

NotaPublicado: 2008-10-15 12:11 @549
por explorer
Entonces es que no entendí la pregunta.

Pues el caso es que lo tienes hecho con el doble bucle foreach, así que no le veo más caso a este problema, ¿no?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push @nombreyapellido, "$nombre $apellido";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4