• Publicidad

para Kidd o monoswinn o quien pueda interesar

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

para Kidd o monoswinn o quien pueda interesar

Notapor Gochsman » 2005-05-24 11:23 @516

bueno gracias a KiDD del foro perl en español por el script que me envio ta muy bueno ... sin embargo cuando lo utilizo en mi script, en mi programa script, me da resultados erroneos.

el script

while ( <$remote> )
{
$count++;
$dat1=$_;
chomp($dat1);
$dat2=$dat2.$dat1;
push(@arreglo,$dat2);
$dat3=pop(@arreglo);

#acomodar datos en una arreglo hash

foreach(split //, $dat3){ #itero carater por caracter

print"$dat3\n";

if(/([A-Z])/){
$Datos{$_} = '';
$memoria = $1;
}

elsif(/(\d)/){
$Datos{$memoria} .= $1;
}
for my $key(sort keys %Datos){
print "$key: $Datos{$key}\n";
}

}
}



este script lee el ultimo valor de una arreglo ..el ultimo valor tiene algo como esto

A111B222C333D444E555

y luego con este valor hace un split y acomoda cada letra con los valores en un arreglo hash

bueno ahy un error observen la salida ademas que me da otro valor q no se de dond sale ...pero la verdad no me importa mucho... lo curioso es que ese valor si lo imprime siempre

A111B222C333D4444
: 0
A: 111
B: 222
C: 333
D: aca faltaron todos los varlores de D
A111B222C333D4444
: 0
A: 111
B: 222
C: 333
D: 4 aca faltaron 2 valores de D
A111B222C333D4444 observen que la variable los tiene
: 0
A: 111
B: 222
C: 333
D: 44 aca falto un valor de D y
A111B222C333D4444
: 0
A: 111
B: 222
C: 333
D: 444
A111B222C333D4444
: 0
A: 111
B: 222
C: 333
D: 444
A111B222C333D4444
: 0
A:
B: 222
C: 333
D: 444
A111B222C333D4444
: 0
A: 1
B: 222
C: 333
D: 444


como pueden ver a veces me imprime todos los valores y a veces no... a que se debe esto??? porque ???? y observen q la variable tiene $dat3 todos lo valores ...???
gg gl hf
Gochsman
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2005-04-22 13:29 @603

Publicidad

Notapor kidd » 2005-05-24 12:40 @570

Hola:

El problema es que tienes la siguiente sentencia dentro del loop foreach:

Código: Seleccionar todo
for my $key(sort keys %Datos){
print "$key: $Datos{$key}\n";
}



Mejor intenta hacer lo siguiente:

Código: Seleccionar todo
while ( <$remote> ) {

  $count++;
  $dat1=$_;
  chomp($dat1);

  $dat2=$dat2.$dat1;
  push(@arreglo,$dat2);
  $dat3=pop(@arreglo);

      #acomodar datos en una arreglo hash
      print "PROCESANDO: $dat3\n";

        foreach(split //, $dat3){ #itero carater por caracter

              if(/([A-Z])/){
                if(!defined($Datos{$1})){  $Datos{$1} = '';  }
                $memoria = $1;
              }

              elsif(/(\d)/){
                $Datos{$memoria} .= $1;
              }
         } #end foreach

} #end while


for my $key(sort keys %Datos){
    print "$key: $Datos{$key}\n";
}



SALUDOS
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron