Página 1 de 1

problemas $_

NotaPublicado: 2005-05-16 17:39 @777
por Gochsman
si estoy leyendo el registro o la variable $_ por la cual me estan llegando datos .... de la siguiente manera

A111,B222,C333,D444.....H888; y llega una caracter a la vez ...como haria ...para ir guardando estos datos y despues calsificarlos con A111 en una varialble y B222 en otra y asi con las demas...que piensa uds ..

oigo sugerencias ayuda ...ya se me acabaron las ideas ...

tomando en cuenta que $_ cambia cierto tiempo el script es
#!/usr/bin/perl -w


use lib "/my/perl_directory/lib/perl5/site_perl/5.8.3/";
use IO::Socket::INET6;
$host="150.187.25.206";
my $dat1;
my @arreglo;
my $dat2;
my $dat3;
my $dato;
my $count;
my $volt1;
$remote = IO::Socket::INET6->new( Proto => "tcp",
PeerAddr =>$host,
PeerPort => 8000,
);
unless ($remote) { die "cannot connect to $host" }
$remote->autoflush(1);
while ( <$remote> )
{

$dat1=$_;
print"$dat1"; # aca estoy busca
if(/A/){
$dat2="primer dato a"."$dat2"." $_";
print"$dat1\n";

}

}

print"222 $dat1\n ";
if (/B/)
{
print "en B\n";
print "$dat1\n";
}
print "333 $dat1\n";
if (/C/)
{
print "en C\n";
print "$dat1\n";
}

print "despues \n";

#open(MUESTRA,"|/usr/bin/rrdtool update /home/golan/datos/temperatura.rrd N:$escritorio:$exterior ");
#close(MUESTRA);

}
close $remote;

NotaPublicado: 2005-05-16 20:50 @909
por kidd
Hola:

No entiendo muy bien lo que buscas, pero checa este ejemplo:

Código: Seleccionar todo
#!/usr/bin/perl -w

use strict;


#NUESTRO STRING DE CARACTERES
my $string = "A11111B222C333D44E5555F666G7777H88888";

my %Datos;


   #UNA MEMORIA
   my $memoria = '';

   #HACEMOS UNA ITERACIÓN CARACTER POR CARACTER
   foreach(split //, $string){

        if(/(\D)/){
           $Datos{$_} = '';
           $memoria = $1;
        }

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

   }


#YA TENEMOS NUESTRO HASH DE DATOS COMPLETO
#AHORA LO IMPRIMIMOS
for my $key(sort keys %Datos){
     print "$key: $Datos{$key}\n";
}


Lo que hace es que recibe uno a unos los caracteres que tiene $string, así como tu dices que recibes los datos.

Entonces creamos una hash que va a tener un llave diferente dependiendo de la letra (A,B,C,D...etc), a la cual vamos agregando al valor los números que se reciban hasta llegar a la siguiente letra.

Por ejemplo, al final de recibir los datos uno a uno, tendrás un hash con la siguiente estructura:

Código: Seleccionar todo
$Datos{'A'} = '11111'
$Datos{'B'} = '222'
$Datos{'C'} = '333'
$Datos{'D'} = '44'
$Datos{'E'} = '5555'
$Datos{'F'} = '666'
$Datos{'G'} = '7777'
$Datos{'H'} = '88888'


Así puedes hacer una iteración for para desplegar los datos, o imprimir cada letra independientemente.

Es la solución que se me ocurre por lo que entiendo que necesitas, ya nada más sería cuestión que lo adaptes a tus necesidades.


SALUDOS

NotaPublicado: 2005-05-23 09:39 @444
por Gochsman
gracias por tu respuesta ta muy buena ....

Re: problemas $_

NotaPublicado: 2011-09-21 16:25 @726
por luisjf
Hola, buen día, una pregunta que me surgió: ¿la variable $_ viene ligada a todas los loops o solo a los foreach o por el contrario, no tiene relación directa con los bucles? Gracias de antemano.

Re: problemas $_

NotaPublicado: 2011-09-21 18:44 @822
por explorer
La variable $_ se utiliza cuando no quieres usar una variable normal, tanto en bucles como en buena parte de los operadores y funciones de Perl.

De hecho, en muchas situaciones, tampoco aparece.

Por ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach (@amigos) {
  2.     say;
  3. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

El bucle "usa" la variable $_ para guardar a cada uno de nuestros @amigos, y say() sabe que, si no le decimos qué, usará el valor de $_ para sacarlo a pantalla.

Re: problemas $_

NotaPublicado: 2011-09-22 07:32 @355
por pvaldes
> ir guardando estos datos y después clasificarlos con A111 en una variable y B222 en otra y así con las demás...

También puedes usar push() y meter todos los datos en una sola variable @var, luego accedes a cada componente de la lista de modo independiente.