Foros del Web » Programación para mayores de 30 ;) » Programación General »

Pasar sencillo programa en Python a PERL

Estas en el tema de Pasar sencillo programa en Python a PERL en el foro de Programación General en Foros del Web. Buenas, Me he empollado un tutorial de como aprender PERL en 5 días, pero no he conseguido transformar este script programado en PYTHON, muy sencillo ...
  #1 (permalink)  
Antiguo 03/05/2009, 09:43
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Pasar sencillo programa en Python a PERL

Buenas,

Me he empollado un tutorial de como aprender PERL en 5 días, pero no he conseguido transformar este script programado en PYTHON, muy sencillo a PERL.

Espero que alguien me ayude, seguro que es muy fácil, pero no soy capaz!!

Al programa se le pasa un argumento (nombre del archivo de txt) el cual transforma y guarda la transformación en otro archivo de texto.

PROGRAMA EN PYTHON

Código:
import sys, os

entrada=sys.argv[1]
file = open(entrada,'r')
file_salida = open('alias_retocados.txt', 'w')

user2 =' '
correo=''

for linea in file:
            user1 = linea.split(';')[0]
            if user2 in user1:

                        correo2 = (linea.split(';')[1]).split('\n')[0]
                        print correo +';'+ correo2

             if not 'Alias de ' in user1:
                        correo = (linea.split(';')[1]).split('\n')[0]

            user2 = user1
FICHERO ENTRADA

Código:
ortopedia0;[email protected]
Alias de ortopedia0;[email protected]
Alias de ortopedia0;[email protected]
Alias de ortopedia0;[email protected]
Alias de ortopedia0;[email protected]
ortopedia3;[email protected]
Alias de ortopedia3;[email protected]
Alias de ortopedia3;[email protected]
Alias de ortopedia3;[email protected]
Alias de ortopedia3;[email protected]
Alias de ortopedia3;[email protected]
Alias de ortopedia3;[email protected]
Alias de ortopedia3;[email protected]
ortopedia450;[email protected]
Alias de ortopedia450;[email protected]
Alias de ortopedia450;[email protected]
ortopedia454;[email protected]
ortopedia455;[email protected]
Alias de ortopedia455;[email protected]
ortopedia456;[email protected]
ortopedia457;[email protected]
Alias de ortopedia457;[email protected]
Y aquí la SALIDA que consige el programa

Alguien puede echarle un vistazo?

Gracias de antemano!!
  #2 (permalink)  
Antiguo 04/05/2009, 06:16
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
Respuesta: Pasar sencillo programa en Python a PERL

abre un archivo, lo recorre fijándose línea por línea que el e-mail no sea un alias ni esté vacío...de estar todo ok lo guardas en otro array que luego guardas en tu archivo nro 2 ?

es fácil de hacer y te recomiendo que uses algunas expresiones regulares para hcer las comprovaciones del e-mail, son muy fimples de usar...

Ecá un vistaso a los tutoriales de www.perlenespanol.com que tienes uno sobre archivos y otro sobre expresiones ;)



Saludos
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 05/05/2009, 04:32
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Respuesta: Pasar sencillo programa en Python a PERL

Esta es una de las muchas formas de hacerlo:
Código:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my %direccion_real_del;

while (<>) {
    chomp;
    my($usuario,$direccion) = split ';';

    if ($usuario !~ /Alias de (.+)/) {
        $direccion_real_del{$usuario} = $direccion;
    }

    else {
        $usuario = $1;
        print "$direccion_real_del{$usuario};$direccion\n"
#           if $direccion_real_del{$usuario};
        ;
    }
}
En vez de buscar si el user2 está contenido en la cadena user1, miramos justo lo contrario: que no contenga "Alias de ". Entonces sabemos que es una línea que muestra el $usuario y su dirección, así que las guardamos en el diccionario.

En cambio, si sí es un alias, sacamos el $usuario del primer par de paréntesis de captura de la expresión regular ($1) y (suponemos que ya la conocemos y por eso) pintamos su dirección real junto con la del alias.

Tiene la ventaja de que recuerda las direcciones reales de todos los usuarios, por si las líneas del fichero de entrada aparecen mezcladas.
__________________
JF^D Perl Programming en Español

Última edición por jferrero; 11/05/2009 a las 08:47
  #4 (permalink)  
Antiguo 05/05/2009, 16:02
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Pasar sencillo programa en Python a PERL

Cita:
Iniciado por jferrero Ver Mensaje
Esta es una de las muchas formas de hacerlo:
Código:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my %direccion_real_del;

while (<>) {
    chomp;
    my($usuario,$direccion) = split ';';

    if ($usuario !~ /Alias de (.+)/) {
        $direccion_real_del{$usuario} = $direccion;
    }

    else {
        $usuario = $1;
        print "$direccion_real_del{$usuario};$direccion\n";
#           if $direccion_real_del{$usuario};
    }
}
En vez de buscar si el user2 está contenido en la cadena user1, miramos justo lo contrario: que no contenga "Alias de ". Entonces sabemos que es una línea que muestra el $usuario y su dirección, así que las guardamos en el diccionario.

En cambio, si sí es un alias, sacamos el $usuario del primer par de paréntesis de captura de la expresión regular ($1) y (suponemos que ya la conocemos y por eso) pintamos su dirección real junto con la del alias.

Tiene la ventaja de que recuerda las direcciones reales de todos los usuarios, por si las líneas del fichero de entrada aparecen mezcladas.
Esta genial jferrero, menudo crack!

Si me puedes decir como intercambiar las posiciones de la salida, me he dado cuenta que la salida buena debería ser

A >> B
y no B >> A

Es decir

El alias no es [email protected]
Sino que es

He intentado cambiar el orden de las variables en el programa pero si lo hacia petaba :S
  #5 (permalink)  
Antiguo 05/05/2009, 16:58
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Respuesta: Pasar sencillo programa en Python a PERL

Código:
print "$direccion;$direccion_real_del{$usuario}\n";
__________________
JF^D Perl Programming en Español
  #6 (permalink)  
Antiguo 10/05/2009, 04:22
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Pasar sencillo programa en Python a PERL

Cita:
Iniciado por jferrero Ver Mensaje
Código:
print "$direccion;$direccion_real_del{$usuario}\n";
Ostia... no se porqué no lo vi
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:27.