Página 1 de 1

para Kidd o monoswinn o quien pueda interesar

NotaPublicado: 2005-05-24 11:23 @516
por Gochsman
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 ...???

NotaPublicado: 2005-05-24 12:40 @570
por kidd
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