• Publicidad

extraccion de unas lineas de un archivo

¿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.

extraccion de unas lineas de un archivo

Notapor Karina » 2005-10-10 19:11 @841

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.
Karina
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2005-10-10 19:04 @836

Publicidad

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

Notapor explorer39 » 2005-10-11 04:15 @219

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?
explorer39
 

DE NUEVO: extraccion de unas lineas de un archivo

Notapor Karina » 2005-10-12 17:39 @777

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:
Karina
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2005-10-10 19:04 @836

Notapor explorer39 » 2005-10-13 03:23 @182

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] )
explorer39
 


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados