Página 1 de 1

extraccion de unas lineas de un archivo

NotaPublicado: 2005-10-10 19:11 @841
por Karina
que tal!

resulta que tengo un archivo (es un correo electronico), del cual quiero extraer solo una parte, pero estos archivos no siempre son iguales, y solo quiero extraer el mensaje que esta firmado, porque todos los correos esta firmados con pgp.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

HOLA ESTE ES UN EJEMPLO PARA VERIFICAR LA FIRMA DE ESTE DOCUMENTO
-----BEGIN PGP SIGNATURE--

lo siguiente :
HOLA ESTE ES UN EJEMPLO PARA VERIFICAR LA FIRMA DE ESTE DOCUMENTO

quiero que se guarde en una variable, me podrian decir mas o menos como hacerlo.

Re: Extracción de unas líneas de un archivo

NotaPublicado: 2005-10-11 04:15 @219
por explorer39
Ya sabemos que en Perl se puede hacer de diez formas distintas, pero una sencilla sería:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Abrir el correo electrónico
Bucle para todas las líneas del correo
Leer línea
Si la linea coincide con el comienzo del mensaje, ponemos una bandera a 1 y leemos dos líneas más (la del hash y la vacía que le sigue). Seguimos con la siguiente línea del bucle
Si la linea coincide con el final del mensaje, salimos del bucle
Si la bandera está a 1, metemos la línea en la variable, acumulando
Repetimos para el resto de lineas
Al final del bucle, pintamos la variable
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Desde luego que hay más formas, y seguro que aquí veremos unas cuantas :-)

¿Necesitas más pistas?

DE NUEVO: extraccion de unas lineas de un archivo

NotaPublicado: 2005-10-12 17:39 @777
por Karina
HOLA SOY YO DE NUEVO, SUCEDE QUE SOY UN POCO INEXPERTA EN PERL , ME HE DEDICADO A APRENDER UN POCO PUESTO QUE LO REQUIERE EL PROYECTO EN EL QUE ESTOY, SUCEDE QUE HE SEGUIDO EL ALGORITMO QUE ME MENCIONASTE, PERO HAY ALGUNAS COSAS QUE NO HE PODIDO ENCONTAR COMO SE HACEN COMO LA DE LEER LAS LINEAS ESTANDO DENTRO DEL BUCLE MIRA YO HE HECHO ESTO:

#!/usr/bin/perl

$filename = $ARGV[0];
open(FILE, "$filename")

while ($linea = <FILE>)
{

if ($linea =~ m/-----BEGIN PGP SIGNED MESSAGE-----/ )
{
$inicio="$. "-1;
open (CORREO, "<$filename");
my @email = <CORREO>;
close (CORREO);
$mensaje=@email[$inicio+3];
print $mensaje;
}
}
ASI OBTENGO LA LINEA DONDE COMIENZA EL MENSAJE, COMO LE HAGO PARA SABER CUANDO TERMINA. :oops: :oops: :oops: :oops: :oops: :oops:

NotaPublicado: 2005-10-13 03:23 @182
por explorer39
Una forma de hacerlo es como la que te dije:
Código: Seleccionar todo
#!/usr/bin/perl

$filename = $ARGV[0];
open(FILE, "<$filename") or die "No puedo abrir $filename\n";

$mensaje = '';
$enmensaje = 0;
while ($linea = <FILE>)
{
    if ($linea =~ m/-----BEGIN PGP SIGNED MESSAGE/ )
    {
        $enmensaje = 1;
        <FILE>; <FILE>;
        # Saltamos a la siguiente línea
        next;
    }
    if ($linea =~ m/-----BEGIN PGP SIGNATURE/ )
    {
        # Salimos del bucle while
        last;
    }

    if ( $enmensaje )
    {
        $mensaje .= $linea;
    }
}
close FILE;
print $mensaje;
Este código asume que sólo hay una parte del mensaje rodeada por la marca BEGIN PGP.
Otra forma de hacerlo:
Código: Seleccionar todo
#!/usr/bin/perl

open FILE,"<$ARGV[0]" or die "No puedo abrir $ARGV[0]\n";

$mensaje = '';
while ( <FILE> )
{
  if ( /-----BEGIN PGP SIGNED MESSAGE/ .. /-----BEGIN PGP SIGNATURE/ )
  {
    $mensaje .= $_;
  }
}
close FILE;

# Dividimos el mensaje en líneas y lo metemos en un vector
@mensaje = split "\n",$mensaje;

# Sacamos las líneas que nos interesan
print join "\n", @mensaje[3 .. $#mensaje-1];
print "\n";

En tu código, puedes hacer algo parecido: las líneas del email estarán entre 3 y la última línea menos 1 ( @email[3..$#email-1] )