Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » Borrar elemento de un array Responder al tema
Nuevo tema


Página 1 de 1  [ 10 mensajes ] 
 
Nota 2012-01-17 10:26 @476

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Borrar elemento de un array
Hola. Tengo una lista en la que muestro el elemento que se ha seleccionado con su número de orden. El problema es que después de mostrar el dato por pantalla quiero borrarlo de la lista.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. my @procer = ("uno","dos","tres","cuatro","cinco","seis");
  2. my $numb = 5;
  3. print @procer[$numb];
  4. #borrar dato


¿Alguien me puede explicar cómo borrar dicho dato?


Última edición por Doddy el 2012-01-17 10:44 @489, editado 1 vez en total

Nota 2012-01-17 10:44 @489
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Borrar elemento de un array
Una cosa es borrarlo:
Syntax: [ Download ] [ Hide ]
Using bash Syntax Highlighting
  1. explorer@casa:~/Documentos/Desarrollo> perl -E '@x = 1 .. 10; delete $x[5]; $"="]["; say "[@x]"'
  2. [1][2][3][4][5][][7][8][9][10]


Y otra cosa es eliminarlo:
Syntax: [ Download ] [ Hide ]
Using bash Syntax Highlighting
  1. explorer@casa:~/Documentos/Desarrollo> perl -E '@x = 1 .. 10; splice @x, 5, 1; $"="]["; say "[@x]"'
  2. [1][2][3][4][5][7][8][9][10]

_________________
JF^D Perl programming


Nota 2012-01-17 10:45 @490

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Re: Borrar elemento de un array
¿Me podrías dar un ejemplo en un script normal?


Nota 2012-01-17 10:50 @493
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Borrar elemento de un array
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. @x = 1 .. 10;
  3. splice @x, 5, 1;
  4. $"="][";
  5. say "[@x]";

_________________
JF^D Perl programming


Nota 2012-01-17 11:20 @514

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Re: Borrar elemento de un array
Tengo un problema con el siguiente código

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl
  2. #Manager 0.3
  3. #Written By Doddy H
  4.  
  5. use Color::Output;
  6. Color::Output::Init;
  7. use Win32::OLE qw(in);
  8. use Win32::Process;
  9.  
  10. &clean;
  11. &options;
  12.  
  13. sub clean {
  14.     cprint "\x0313";
  15.     print "\nManager 0.3\nCopyright 2012 Doddy Hackman\nMail:lepuke[at]hotmail[com]\n\n";
  16.     cprint "\x0x30\n\n";
  17.     my %process = getprocess();
  18.     chomp %process;
  19.     $limit = "";
  20.     for my $pid ( keys %process ) {
  21.         if ( $pid ne "" ) { $limit++ }
  22.         push( @procer, $process{$pid} );
  23.         push( @pids,   $pid );
  24.         chomp( @procer, @pids );
  25.     }
  26.     $limit--;
  27.     for my $n ( 1 .. $limit ) {
  28.         cprint "\x037";
  29.         print "Process Number: [$n]\tProcess name : $procer[$n]\tPID : $pids[$n]\n";
  30.         cprint "\x037";
  31.     }
  32. }
  33.  
  34. sub options {
  35.     cprint "\0035";
  36.     print "\n\nOptions :\n\n[a] : Close a process\n[b] Clean Console\n[c] Exit\n\n\n[+] Write you options : ";
  37.     $t = <STDIN>;
  38.     chomp $t;
  39.     if ( $t eq "a" ) {
  40.         &close;
  41.     }
  42.     elsif ( $t eq "b" ) {
  43.         reload();
  44.     }
  45.     elsif ( $t eq "c" ) {
  46.         print "\n\n[+] Written By Doddy H\n\n";
  47.         <stdin>;
  48.         exit(1);
  49.     }
  50.     else {
  51.         reload();
  52.     }
  53. }
  54.  
  55. sub close {
  56.     print "\n[+] Write the number of the process : ";
  57.     $numb = <STDIN>;
  58.     chomp $numb;
  59.     Win32::Process::KillProcess( @procer[$numb], "" );
  60.     splice @procer, $numb, 1;                           ##### FALLO #####
  61.     print "\n\n[+] OK , Process Closed\n\n";
  62.     <stdin>;
  63.     reload();
  64. }
  65.  
  66. sub reload {
  67.     system("cls");
  68.     &clean;
  69.     &options;
  70. }
  71.  
  72. sub getprocess {
  73.  
  74.     my %procesos;
  75.  
  76.     my $uno = Win32::OLE->new("WbemScripting.SWbemLocator");
  77.     my $dos = $uno->ConnectServer( "", "root\\cimv2" );
  78.  
  79.     foreach my $pro ( in $dos->InstancesOf("Win32_Process") ) {
  80.         $procesos{ $pro->{Caption} } = $pro->{ProcessId};
  81.     }
  82.     return %procesos;
  83. }
  84.  
  85. # The End ?


El valor no se me borra en la línea 60.


Última edición por explorer el 2012-01-17 11:31 @522, editado 1 vez en total
Formateado de código con Perltidy


Nota 2012-01-17 11:37 @526
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Borrar elemento de un array
Con splice() estás eliminando elementos, no borrándolos.

Y al eliminar elementos, los que le siguen en el resto del array, suben un puesto, dejando al array con una longitud menor.

A lo mejor lo que quieres es simplemente borrarlos. Te vale entonces con hacer una de estas líneas:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
undef  $procer[$numb];
delete $procer[$numb];
$procer[$numb] = '';

teniendo en cuenta que el delete() se comporta de forma distinta con los elementos del final del array: recortará el array.

_________________
JF^D Perl programming


Nota 2012-01-17 11:50 @535

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Re: Borrar elemento de un array
He encontrado una forma de solucionarlo. El código me queda así.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl
  2. #Manager 0.3
  3. #Written By Doddy H
  4.  
  5. use Color::Output;
  6. Color::Output::Init;
  7. use Win32::OLE qw(in);
  8. use Win32::Process;
  9.  
  10. &clean;
  11. &options;
  12.  
  13. sub clean {
  14.     cprint "\x0313";
  15.     print "\nManager 0.3\nCopyright 2012 Doddy Hackman\nMail:lepuke[at]hotmail[com]\n\n";
  16.     cprint "\x0x30\n\n";
  17.     my %process = getprocess();
  18.     chomp %process;
  19.     $limit = "";
  20.     for my $pid ( keys %process ) {
  21.         if ( $pid ne "" ) { $limit++ }
  22.         push( @procer, $process{$pid} );
  23.         push( @pids,   $pid );
  24.         chomp( @procer, @pids );
  25.     }
  26.     $limit--;
  27.     for my $n ( 1 .. $limit ) {
  28.         cprint "\x037";
  29.         print "Process Number: [$n]\tProcess name : $procer[$n]\tPID : $pids[$n]\n";
  30.         cprint "\x037";
  31.     }
  32. }
  33.  
  34. sub options {
  35.     cprint "\0035";
  36.     print "\n\nOptions :\n\n[a] : Close a process\n[b] Clean Console\n[c] Exit\n\n\n[+] Write you options : ";
  37.     $t = <STDIN>;
  38.     chomp $t;
  39.     if ( $t eq "a" ) {
  40.         &close;
  41.     }
  42.     elsif ( $t eq "b" ) {
  43.         reload();
  44.     }
  45.     elsif ( $t eq "c" ) {
  46.         print "\n\n[+] Written By Doddy H\n\n";
  47.         <stdin>;
  48.         exit(1);
  49.     }
  50.     else {
  51.         reload();
  52.     }
  53. }
  54.  
  55. sub close {
  56.     print "\n[+] Write the number of the process : ";
  57.     $numb = <STDIN>;
  58.     chomp $numb;
  59.     Win32::Process::KillProcess( @procer[$numb], "" );
  60.     print "\n\n[+] OK , Process Closed\n\n";
  61.     <stdin>;
  62.     reload();
  63. }
  64.  
  65. sub reload {
  66.     system("cls");
  67.     system($0);
  68.     &clean;
  69.     &options;
  70. }
  71.  
  72. sub getprocess {
  73.  
  74.     my %procesos;
  75.  
  76.     my $uno = Win32::OLE->new("WbemScripting.SWbemLocator");
  77.     my $dos = $uno->ConnectServer( "", "root\\cimv2" );
  78.  
  79.     foreach my $pro ( in $dos->InstancesOf("Win32_Process") ) {
  80.         $procesos{ $pro->{Caption} } = $pro->{ProcessId};
  81.     }
  82.     return %procesos;
  83. }
  84.  
  85. # The End ?
  86.  


Última edición por explorer el 2012-01-17 11:56 @539, editado 1 vez en total
Formateado de código con Perltidy


Nota 2012-01-17 12:09 @548
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Borrar elemento de un array
Me temo que @procer no hace más que crecer y crecer...

¿No sería más claro usar solo %process a lo largo del programa? Te ahorrarías unas cuantas líneas...

_________________
JF^D Perl programming


Nota 2012-01-17 12:56 @580

Perlero Senior
Registrado: 2009-03-01 18:39 @818
Mensajes: 387
Re: Borrar elemento de un array
Sí, pero no sé cómo hacerlo. ¿Vos no me podrías ayudar a corregir el código?


Nota 2012-01-17 15:56 @706
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Borrar elemento de un array
Lo siento, yo no tengo Windows.

_________________
JF^D Perl programming


Responder al tema  [ 10 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO