Re: Grep en perl
El día 27 de octubre de 2008 15:54, Pablo Jiménez <pejimene@vtr.net> escribió:
> On Mon, Oct 27, 2008 at 01:15:58PM +0100, Javier wrote:
>> Hola lista,
>>
>> estoy escribiendo un programilla en perl muy simple. Coge desde STDIN
>> la entrada, que es un correo electrónico y muestra los campos que este
>> tiene. Luego, dentro del campo $body (siempre tiene un formato
>> específico algo: valor) necesito quedarme sólo con un campo. ¿Cómo
>> puedo lograrlo?
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> El programa:
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> my $mbox= \*STDIN;
>> my $mb = Mail::MboxParser->new($mbox);
>> for my $msg ($mb->get_messages)
>> {
>> my $to = $msg->header->{to};
>> my $from = $msg->header->{from};
>> my $subject = $msg->header->{subject} || '<No Subject:>',
>> my $body = $msg->body($msg->find_body,0);
>> my $body_str = $body->as_string || '<No message text>';
>> print "From: $from\n",
>> "To: $to\n",
>> "Subject: $subject\n",
>> "Message Text: $body_str\n";
>> }
>>
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> El mail de entrada:
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> Pages: 1
>> Receiver:
>> Quality: 196
>> ...
>> GroupID: 16
>> CommID: c000000040
>>
>> Processing time was 0:39.
>>
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> La idea es leer con el programa esta entrada y luego conseguir
>> quedarme en una variable con el valor "c000000040". Alguna idea de
>> cómo realizar ese "grep" en perl. Lo intenté, pero en perl no consigo
>> sacarlo.
>
> Tal vez algo como lo que sigue te sirva:
>
> sub get_value {
> my $body = shift || return undef;
> my $re = shift || return undef;
> my $value = undef;
>
> if ($body) {
> @$value = grep { /$re/ } split(qr{\n}, $body);
> for my $val (@$value) {
> print "VALUE $val\n";
> }
> }
> return $value
> }
>
> Para tu caso, debieras invocar &get_value de la siguiente manera:
>
> &get_value($body_str, "c000000040");
>
> Saludos.
>
> --
> Pablo Jiménez
>
>
> --
> To UNSUBSCRIBE, email to debian-user-spanish-REQUEST@lists.debian.org
> with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
>
>
Hola,
ya está solucionado. El gran fallo que estaba a tener es que tenía el
$body_str como un string y no como un vector. Al ver la idea del
split, lo conseguí poner en vector y el problema ya tuvo fácil
solución :)
Gracias por las aportaciones!
--
Power by Debian.
A greeting,
Javier.
Reply to: