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

Lectura de fichero

Estas en el tema de Lectura de fichero en el foro de Programación General en Foros del Web. hola, ya estoy aqui otra vez, he tardado mas de lo que creia pero vuelvo con otra duda... Por cierto, veo algo cambiado el foro... ...
  #1 (permalink)  
Antiguo 19/04/2005, 01:25
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 2 meses
Puntos: 0
Lectura de fichero

hola, ya estoy aqui otra vez, he tardado mas de lo que creia pero vuelvo con otra duda... Por cierto, veo algo cambiado el foro... bueno a lo que iba...
Resulta que tengo un fichero de texto en el que hay dos campos separados por el operador | y un salto al final de la linea. Es decir, algo asi:

usuario1|contraseña1
usuario2|contraseña2
usuario3|contraseña3...


Bueno, creo que está claro de que va esto ¿no?, es para validar a un usuario en la página. He leido manuales y mas o menos entiendo como hacerlo, pero hay algún dealle que se me escapa. He encontrado lo siguiente:

open (FICHERO,"login.txt");
my @login=split(/|/,$usuario);
foreach $nombre (@login)
{
print "$nombre\n";
}


Entiendo que este script me imprimirá todos los datos del fichero separados por |. Pero lo que yo pretendo es que me guarde el primer dato (usuario1) en una variable y el segundo (contraseña1) en otra, para yo poder trabajar con ellos, y una vez terminado pase a la siguiente linea (es decir, el mismo proceso pero con usuario2 y contraseña2) y así sucesivamente...
  #2 (permalink)  
Antiguo 19/04/2005, 05:53
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Entiendo, yo probaría con algo así...
Código:
open (FICHERO,"login.txt");
my @lineas=<FICHERO>;
foreach my $linea (@lineas)
{
   my ($nombre,$password) = split(/\|/,$linea);
   chop($password);
   #YA TENEMOS LOQ UE NECESITAS, AHORA A VALIDAR LA INFO
   if ($FORM{'usuario'} eq $nombre){
         if ($FORM{'password'} eq $password){
                #Se logeó correctamente !!!!
         }
   }
}
Se entiende ? primero cargas el fichero en un array y luego por cada elemento vas separándolo y analizando si es el correcto...

Espero que te sirva
Saludos
PD: El chop es para eliminar el salto de línea...
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 19/04/2005, 06:20
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 2 meses
Puntos: 0
Validar un usuario

Perfecto, era justo lo que necesitaba.
Muchas gracias.
  #4 (permalink)  
Antiguo 19/04/2005, 06:27
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Denada, y checkea que el otro post que mandaste a este foro lo moví al de HTML...

Saludos
__________________
Esteban Quintana
  #5 (permalink)  
Antiguo 19/04/2005, 06:41
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 2 meses
Puntos: 0
validar usuario

Ok, ya lo comprobé.
Solo una cosa, he copiado el script pero me dá un error en las lineas donde aparece $form. Concretamente el error que da es el siguiente:
Global symbol "%FORM" requires explicit package name at inicio.pl line 17.
Global symbol "%FORM" requires explicit package name at inicio.pl line 18.
He probado colocando el my delante, pero entonces me dá un error de sintaxis....
  #6 (permalink)  
Antiguo 19/04/2005, 07:24
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
debes colocar al principio de todo

my %FORM

Checkea que $form y $FORM NO ES LO MISMO !!!!!

además no se como haces la entrada de los datos del formualrio, lo puse en un hash porque es lo que se hace generalmente...

Ahí debes colocar los datos de entrada del formulario que llena el usuario para loggearse...

Saludos
__________________
Esteban Quintana
  #7 (permalink)  
Antiguo 20/04/2005, 03:31
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 2 meses
Puntos: 0
Lectura de fichero

Hola, he modificado el script que pusiste para adecuarlo a lo que necesito, aunque no estoy muy seguro de haberlo hecho bien... en cualquier caso te lo comento a ver que te parece ¿ok?

Los datos del formulario los obtengo mediante el $input_data famoso.


my $usuario=$input_data{'usuario'};
my $password=$input_data{'password'};
my $usuario_reg;
my $password_reg;

open (FICHERO,"Login.txt");
my @lineas=<FICHERO>;
foreach my $linea (@lineas)
{
my ($usuario_reg,$password_reg) = split(/\|/,$linea);
chop($password_reg);
#YA TENEMOS LOQ UE NECESITAS, AHORA A VALIDAR LA INFO
if ($usuario eq $usuario_reg){
if ($password eq $password_reg){
print "Se logea correctamente !!!!";
}
}
}
print $usuario;
print $password;
print $usuario_reg;
print $password_reg;


Suponiendo que esto funcionase, independientemente de que el nombre de usuario y la contraseña sean correctos, deberia imprimir tanto los datos que yo puse en el formulario como los que hay en el fichero ¿no es asi?. El problema es que solo me imprime los dos primeros, por lo que la lectura del fichero debe ser erronea...

Hay una linea en el script que no entiendo del todo :my @lineas=<FICHERO>;. Se supone que esto introduce en un array los dastos del fichero, pero los datos de este tienen la estructura:
usuario1|contraseña1
usuario2|contraseña2
usuario3|contraseña3
Mi duda es que no se como quedan almacenados estos datos dentro del array, es decir, ¿quedarian de la siguiente forma?
usuario1|contraseña1usuario2|contraseña2usuario3|c ontraseña3
Ademas, yo entiendo qur de esta forma todos los datos se guardaran en el primer hueco del array ¿no? con lo que luego ¿como se sabe cuando tiene que saltar de linea?
Podrias aclararme esto???
  #8 (permalink)  
Antiguo 20/04/2005, 06:03
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
cuando hacés my @lineas=<FICHERO>; lo que hace es cargarte cada línea del archivo en un elemento del array o sea que

$lineas[0];
#El primer elemento contiene usuario1|contraseña1

$lineas[1];
@El segundo elemento contiene usuario2|contraseña2

Y así, entonces por cada línea tienes un elemento del array...

Ahora bien, cuando usas my para definir una variable lo que hacés es decirle que esa variable es local...Local al ámbito en el que estés...

Si hacés my en un foreach, esa variable solo sirve para el foreach, si lo hacés para el IF solamente sirve para el if, y una vez fuera PERL destrulle la variable liberando el espacio en memoria...Por ejemplo

foreach my $linea (@lineas){
#acá puedo usar $linea, tiene contenido
}
#acá NO puedo usar $linea, no tiene contenido, de hecho no existe la variable

Una forma muy correcta de programar es usando el pragma use strict, que obliga al programador a definir correctamente todas las variables, y así hacer programas más seguros y mejor programados....

En perlenespanol.com tienes un tutorial sobre como usar el pragma use strict, te lo recomiendo mucho ya que es una de las mejores técnicas para programar...

Saludos
__________________
Esteban Quintana
  #9 (permalink)  
Antiguo 20/04/2005, 06:34
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 2 meses
Puntos: 0
Lectura de fichero

Ahhhh, ahora si lo entiendo.
Lo he probado y funciona perfectamente. Gracias otra vez.
Casi me estas haciendo tu la página.....
  #10 (permalink)  
Antiguo 20/04/2005, 13:12
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
jajaja, todo bien, luego te cobro un porcentual sobre las ganancias...jajaja

Saludos
__________________
Esteban Quintana
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 02:11.