• Publicidad

Problema con array

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Problema con array

Notapor colorado » 2011-03-20 05:31 @271

Tengo el siguiente código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open (PROXY, 'test.txt');
  2. my @PROXY = <PROXY>;
  3. chomp @PROXY;
  4. close(PROXY);
  5.  
  6. open (URLS, 'direcciones.txt');
  7. my @urls = <URLS>;
  8. chomp @urls;
  9. close(URLS);
  10.  
  11.  
  12. foreach my $child ( 0 .. 2 ) {
  13.  
  14.  
  15. for (my $t = 0; $t  < @urls; $t+=3) {
  16.  
  17.  
  18. my $p =  ($t + $child -3);
  19. my $url = $urls[$t + $child];
  20.  
  21.  
  22. for my $intentos ( 1 .. @PROXY ) {
  23.  
  24. $p =  (3 + $p) % @PROXY ;
  25.  
  26.  
  27. print $PROXY[$p]," ","$urls[$t + $child]","\n";    
  28.  
  29. }
  30.  
  31. print "\n";
  32.  
  33. }
  34.  
  35.  
  36. }
  37.  
  38. print "Finalizado.\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



salida:


Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1 direccion111
4 direccion111
7 direccion111
10 direccion111
1 direccion111
4 direccion111
7 direccion111
10 direccion111
1 direccion111
4 direccion111
7 direccion111
10 direccion111

2 direccion222
5 direccion222
8 direccion222
11 direccion222
2 direccion222
5 direccion222
8 direccion222
11 direccion222
2 direccion222
5 direccion222
8 direccion222
11 direccion222

3 direccion333
6 direccion333
9 direccion333
12 direccion333
3 direccion333
6 direccion333
9 direccion333
12 direccion333
3 direccion333
6 direccion333
9 direccion333
12 direccion333
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Lo que necesito es que el array @PROXY, cuando llegue al último elemento, coja el siguiente valor y que el resultado sea este:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1 direccion111
4 direccion111
7 direccion111
10 direccion111
2 direccion111
5 direccion111
8 direccion111
11 direccion111
3 direccion111
6 direccion111
9 direccion111
12 direccion111

2 direccion222
5 direccion222
8 direccion222
11 direccion222
3 direccion222
6 direccion222
9 direccion222
12 direccion222
4 direccion222
7 direccion222
10 direccion222
1 direccion222

3 direccion333
6 direccion333
9 direccion333
12 direccion333
4 direccion333
7 direccion333
10 direccion333
1 direccion333
5 direccion333
8 direccion333
11 direccion333
2 direccion333
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Cómo puedo hacerlo?
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658

Publicidad

Re: Problema con array

Notapor explorer » 2011-03-21 11:54 @538

Se puede hacer con un poco de matemáticas...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my @PROXY = 1 .. 12;
  7. my @URL   = qw( direccion111 direccion222 direccion333 );
  8. my $PASO  = 3;
  9.  
  10. for my $offset ( 0 .. $#URL ) {
  11.     for my $j ( $offset .. $offset+$PASO-1 ) {
  12.         my $k = $j;
  13.         for ( 1 .. @PROXY/$PASO ) {
  14.             printf "%2d %s\n", $PROXY[$k], $URL[$offset];
  15.             $k = ($k + $PASO) % @PROXY;
  16.         }
  17.     }
  18.     print "\n";
  19. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con array

Notapor colorado » 2011-03-22 12:09 @548

Muchas gracias por la respuesta, explorer, tu script funciona tal y como pedí.

Pero creo que no es lo que necesito.

Debería de haber matizado más mi pregunta.

Quiero utilizar Parallel::ForkManager.

Esta línea la necesito, para definir los subprocesos.

12.foreach my $child ( 0 .. 2 ) {


con Parallel::ForkManager mi script queda así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use Parallel::ForkManager;
  4.  
  5.  
  6. open (PROXY, 'test.txt');
  7. my @PROXY = <PROXY>;
  8. chomp @PROXY;
  9. close(PROXY);
  10.  
  11. open (URLS, 'direcciones.txt');
  12. my @urls = <URLS>;
  13. chomp @urls;
  14. close(URLS);
  15.  
  16. my $forker      = Parallel::ForkManager->new(3);
  17.  
  18. foreach my $child ( 0 .. 2 ) {
  19.  
  20.  
  21.  
  22. $forker->start and next;
  23.  
  24. for (my $t = 0; $t  < @urls; $t+=3) {
  25.  
  26.  
  27. my $p =  ($t + $child -3);
  28. my $url = $urls[$t + $child];
  29.  
  30.  
  31. for my $intentos ( 1 .. @PROXY ) {
  32.  
  33. $p =  (3 + $p) % @PROXY ;
  34.  
  35.  
  36. print $PROXY[$p]," ","$urls[$t + $child]","\n";    
  37.  
  38.  
  39. sleep 1;
  40.    
  41.  
  42. }
  43. print "\n";
  44.  
  45. }
  46.  
  47.  
  48. $forker->finish;
  49. }
  50.  
  51. $forker->wait_all_children;
  52. print "Finalizado.\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



salida:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1 direccion111
2 direccion222
3 direccion333
4 direccion111
5 direccion222
6 direccion333
7 direccion111
8 direccion222
9 direccion333
10 direccion111
11 direccion222
12 direccion333
1 direccion111
2 direccion222
3 direccion333
4 direccion111
5 direccion222
6 direccion333
7 direccion111
8 direccion222
9 direccion333
10 direccion111
11 direccion222
12 direccion333
1 direccion111
2 direccion222
3 direccion333
4 direccion111
5 direccion222
6 direccion333
7 direccion111
8 direccion222
9 direccion333
10 direccion111
11 direccion222
12 direccion333
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y me gustaría que quedase así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1 direccion111
2 direccion222
3 direccion333
4 direccion111
5 direccion222
6 direccion333
7 direccion111
8 direccion222
9 direccion333
10 direccion111
11 direccion222
12 direccion333
2 direccion111
3 direccion222
4 direccion333
5 direccion111
6 direccion222
7 direccion333
8 direccion111
9 direccion222
10 direccion333
11 direccion111
12 direccion222
1 direccion333
3 direccion111
4 direccion222
5 direccion333
6 direccion111
7 direccion222
8 direccion333
9 direccion111
10 direccion222
11 direccion333
12 direccion111
1 direccion222
2 direccion333
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Cada subproceso pasaría toda la lista de números de test.txt con cada una de las tres direcciones de la forma más espaciada posible.
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658

Re: Problema con array

Notapor colorado » 2011-03-23 17:19 @763

Al final lo conseguí, solo tuve que adaptar tu código a lo que quería.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Parallel::ForkManager;
  3.  
  4. my @PROXY = 1 .. 12;
  5. my @URL   = qw( direccion111 direccion222 direccion333 );
  6. my $PASO  = 3;
  7.  
  8.  
  9.  
  10.  
  11. my $forker      = Parallel::ForkManager->new(3);
  12.  
  13. foreach my $child ( 0 .. 2 ) {
  14.  
  15.     $forker->start and next;
  16.  
  17.     for (my $offset=0; $offset < @URL; $offset+=3 ) {
  18.  
  19.         my $PASO  = 3;
  20.  
  21.         for my $j ( $offset .. $offset+$PASO-1 ) {
  22.             my $k = $j  + $child;
  23.             for (my $PROXY=0; $PROXY < @PROXY/$PASO;  $PROXY++) {
  24.                 printf "%2d %s\n", $PROXY[$k], $URL[$offset + $child];
  25.  
  26.                 sleep(1);
  27.                 $k = ($k + $PASO) % @PROXY;
  28.             }
  29.         }
  30.         print "\n";
  31.     }
  32.     $forker->finish;
  33. }
  34.  
  35. $forker->wait_all_children;
  36. print "Finalizado.\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


salida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1 direccion111
 2 direccion222
 3 direccion333
 4 direccion111
 5 direccion222
 6 direccion333
 7 direccion111
 8 direccion222
 9 direccion333
10 direccion111
11 direccion222
12 direccion333
 2 direccion111
 3 direccion222
 4 direccion333
 5 direccion111
 6 direccion222
 7 direccion333
 8 direccion111
 9 direccion222
10 direccion333
11 direccion111
12 direccion222
 1 direccion333
 3 direccion111
 4 direccion222
 5 direccion333
 6 direccion111
 7 direccion222
 8 direccion333
 9 direccion111
10 direccion222
11 direccion333
12 direccion111
 1 direccion222
 2 direccion333

Finalizado.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Genial como siempre, explorer.
Muchas gracias y perdona por liar tanto los temas.
colorado
Perlero nuevo
Perlero nuevo
 
Mensajes: 73
Registrado: 2010-01-31 14:48 @658

Re: Problema con array

Notapor explorer » 2011-03-24 13:07 @588

Un par de detalles.

La línea 19 sobra, porque ya está en la 6.

Y el '3' de la línea 17 es lo que vale $PASO.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 38 invitados