• Publicidad

EOL archivos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

EOL archivos

Notapor AgeValed » 2008-09-19 11:21 @514

Bueno cuando estaba haciendo unas pruebas para aprender el lenguaje me salío una duda.

Estaba haciendo un ejemplo en el cual...

Se podría crear un usuario y pass.
Si tenía ya usuario y pass podía ingresarlo y se validaba.

Lo que hacía en sí es si creaba un usuario y pass lo único que hacía es guardarlo en un archivo con el formato.

Código: Seleccionar todo
[usuario];[password]


(no codificaba ni nada)

y al validar lo que hacía es leer el archivo lo separaba y comparaba...

comparaba el nombre de usuario y andaba perfecto, pero después cuando comparaba el password (use la misma sub para ambos) y ahí es donde me daba error y me decía que no eran iguales.

Al mostrarlo va tomando las variables y escribe:

Código: Seleccionar todo
TEST [usuarioIngresado] TEST [usuarioDelArchivo]
TEST [passIngresado] TEST [passDelArchivo]


Me salía

Código: Seleccionar todo
TEST usuario TEST usuario
 TEST pass


como que borraba el primer TEST [passIngresado], no sé, algo raro había en EOL que pasaba eso.

Usaba chomp para sacar el fin de línea y no lo quería comparar y pasaba eso...

Ya solucioné ese problema modificando el formato del archivo y agregándole un ; al final

Código: Seleccionar todo
[usuario];[password];


¡¡¡¡¡Pero la duda me quedó el por qué hacía eso!!!!! Quería saber si alguien sabe... sino no hay drama, sino curiosidad de saber el por qué de todas las cosas.


Saludos... Pablo
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Publicidad

Notapor creating021 » 2008-09-19 17:40 @777

Bienvenido AgeValed.

Sería muy bueno ver el código que tienes hecho... de cualquier forma, aquí va mi solución (de muchas posibles):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
use strict; #Esto es un pragma muy útil
#Formato: [usuario];[password]EOL

#Abrimos el archivo/fichero
open FL, "archivo_password" or die
    "No se puede abrir el achivo: $!\n";
while ( my $linea = <FL> ){
    chomp $linea;
    if ( $linea =~ s/^\[(.*)\];\[.*\]$/ ){
        print "El usuario es $1\n";
        print "Con password $2\n";
    }
    else { warn "archivo_password: línea $. no cumple con el formato\n"; }
}
close FL;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor AgeValed » 2008-09-22 07:01 @334

Acá les dejo el código. Es MUY básico.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $nombreUsuario;
my $password;
my $pwd;
my @datos;
my $auxtexto;
my %dato;
my $usr;
my $auxvalor;
my $auxver;
# Se crea un nuevo usuario y se guarda en el archivo


# se abre el archivo para escritura.
# pre = niguno.
# post = el archivo es abierto para escritura.
# future = validar si se abrio o no.
sub abrirArchivoEscritura {
        open(usuarios,">>usuarios.txt");
}

# se abre el archivo para lectura.
# pre = niguno.
# post = el archivo es abierto para lectura.
# future = validar si se abrio o no.
sub abrirArchivoLectura {
        open(usuarios,"usuarios.txt");
}

# se cierra el archivo.
# pre = el archivo debe estar abierto.
# post = el archivo es cerrado.
# future = validar si se cerro o no.
sub cerrarArchivo {
        close(usuarios);
}


# lee el archivo y verifica si existe el par usr,pwd valido
# pre = el archivo debe estar abierto.
# post = 1 si el psw pertenece al usr 2 si pws es distinto del usuario 1 si no existe el usr
# future =
sub leerArchivo {
        $usr = $_[0];
        $pwd = $_[1];

        while (my $usu = <usuarios>)
                {
                chomp($usu);

                @datos = split (/;/ , $usu);
                $dato{@datos[0]} = "@datos[1]";

                if (&verificar($usr,@datos[0])) {
                        if (&verificar($pwd,@datos[1])) {
                                return 1;
                        }
                        else {
                                return 2;
                        };
                }
        }
        return 0;
       

}
       
# Verifica que los datos sean iguales
# pre = niguno
# post = 1 si son iguales los datos 0 si no son iguales los datos.
# future =
sub verificar {
        my $a = $_[0];
        my $b = $_[1];
        if ($a eq $b) {
                return 1;
        }
        else {
                return 0;      
        }
}

# Guardo nombre de usuario y contraseña en el archivo.
# formato usu;psw;
# pre = el archivo debe estar abierto.
# pos = se guardo en el archivo.
# future = validar si se guardo o no.
sub guardarArchivo{
        print usuarios "$_[0];$_[1];\n";
}

# Ingreso de nuevo usuario y contraseña.
# pre = niguno.
# pos = 1 si se guardo correctamente 0 si no se guardo correctamente
# future =
sub ingresoNuevoUsuario {
        print "-------------------------------\n";
        print "Ingrese nombre de usuario:\n";
        chomp($nombreUsuario = <STDIN>);
        print "-------------------------------\n";
        print "ingrese pass:\n";
        chomp($password = <STDIN>);
        system("clear");
        &abrirArchivoEscritura;
        if (&guardarArchivo($nombreUsuario,$password)) {
                &cerrarArchivo;
                return 1;
        }
        else {
                &cerrarArchivo;
                return 2;
        }
}

# Pide nombre y password y verifica que este en el archivo y que la pass ingresada sea la misma
# pre = niguno
# post = 1 si el usuario se logeo correctamente 2 si el pass es inocrrecto 0 si no existe el usuario.
# future =
sub verificarUsuario {
        print "-------------------------------\n";
        print "Ingrese nombre de usuario:\n";
        chomp($nombreUsuario = <STDIN>);
        print "-------------------------------\n";
        print "ingrese pass:\n";
        chomp($password = <STDIN>);
        system("clear");
        &abrirArchivoLectura;
        $auxvalor = &leerArchivo($nombreUsuario,$password);
        &cerrarArchivo;
        if ($auxvalor == 1) {
                return 1;
        }
        else {
                if ($auxvalor == 2) {
                        return 2;
                }
                else { 
                        return 0;
                }
        }
}

#Inicio del "mail" del programa.
my $aux;

print "Posee cuenta generada? s-n \n";
chomp($aux = <STDIN>);

system("clear");

#Si no posee cuenta en el archivo crea una nueva.
if ($aux eq "n") {
        if (&ingresoNuevoUsuario) {
                print "Usuario Ingresado correctamente.\n";
        }
        else {
                print "El usuario no se pudo ingresar correctamente";
        }
}
#Si posee cuenta en el archivo, lo verifica.
elsif ($aux eq "s") {
        system("clear");
        $auxver = &verificarUsuario;
        if ($auxver == 1) {
                print "ACCESO AUTORIZADO\n";
        }
        else {
                if ($auxver == 2) {
                        print "PASSWORD INCORRECTA\n";
                }
                else {
                        print "Usted no esta en el listado\n";
                }
        }
}
else {
        print "Opcion no valida.\n";
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


future es lo que tendría que hacer y no hice :P

Este código funciona bien o sea hace lo que le da la gana :P

Saludos...
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Notapor explorer » 2008-09-22 07:16 @344

Esta línea no me gusta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$dato{@datos[0]} = "@datos[1]";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

debería ser
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$dato{$datos[0]} = "$datos[1]";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor AgeValed » 2008-09-22 07:39 @360

mmm ¿por?

O sea, ¿que cambiarías de @datos a $datos en el código?

Puede ser, pero pregunto para saber, empecé hace pocos días con Perl y mi intención es aprender más...

Muchas gracias por las respuestas a ambos, no agradecí antes, perdón.
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Notapor explorer » 2008-09-22 08:11 @382

No...

@datos es una variable array, y $datos es otra variable, que es un escalar, y diferente de la anterior.

El 'sigil' (carácter que precede a las variables, indica el TIPO de acceso a esas variables. Ejemplo: si queremos acceder al primer elemento de @datos, como lo que vamos a obtener es un escalar, entonces necesitamos poner un '$' delante. Así que escribimos $datos[0]. Si escribimos @datos[0] estamos indicando que queremos sacar una 'lista' de valores desde @datos, y que esos valores corresponden solo a la posición 0.

Parece lo mismo, pero no lo es.

Quizás queda más claro si queremos extraer los elementos 0 y 10 de @datos: escribimos @datos[0,10], porque son dos valores escalares, y como es una lista de valores, ponemos la '@' delante.

Bueno, no sé si me he explicado bien. En estos hilos hay más explicaciones sobre este tema. Más información en perldata#Variable-names (mira el primer ejemplo):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$days        # un único valor escalar
$days[28]    # el elemento vigésimo noveno del array @days
$days{'Feb'} # el valor correspondiente a 'Feb' del hash %days
$#days       # el índice del último elemento del array @days
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor AgeValed » 2008-09-22 08:19 @388

Sí se entendió muy bien, muchas gracias.

Voy a seguir toqueteando más, así aprendo y cualquier cosa me verán de nuevo, muy buena la web.

Y ayudaré en todo lo que pueda...

Saludos... Pablo
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Notapor explorer » 2008-09-22 10:32 @480

He probado el código y a mí me funciona, siempre que antes haya hecho el cambio comentado antes.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 0 invitados

cron