Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 


Página 1 de 1  [ 4 mensajes ] 
 
Nota 2009-12-12 11:26 @518

Perlero Nuevo
Registrado: 2009-12-02 21:34 @940
Mensajes: 2
Perl y Mysql
Hola amigos, estoy preparando un documento y necesito ilustrar cómo crear una base de datos (tabla) con la misma estructura del fichero /etc/passwd de Linux, completar la tabla y afichar la tabla con la ayuda de un script Perl y por último afichar algunos de los utilizadores con la ayuda de su "nombre".

Hasta este momento he podido hacer lo siguiente y me gustaría recibir sugerencias para avanzar.

En MySQL después de estar conectado ejecuto las siguientes instrucciones:
nombre del fichero de texto mibase.sql

Syntax: [ Download ] [ Hide ]
Using sql Syntax Highlighting
DROP DATABASE IF EXISTS users;
CREATE DATABASE users;
USE users;
CREATE TABLE usuarios (
    usager char(20),
    fil1 char(1),
    uid int,
    gid int,
    gecos char(30),
    rep_home char(50),
    programe char(50)
);
LOAD DATA INFILE '/etc/passwd' INTO TABLE usuarios FIELDS terminated BY ":";
SELECT * FROM usuarios;


¿Es esto correcto?

Ahora cómo copiar la información a partir de /etc/passwd. Sé que me falta algo pero hice esto:

Creé el script en Perl
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. open(fic_in,"/etc/passwd") || die "erreur d'ouverture du fichier ...\n";
  3. while($line=<fic_in>)
  4. {
  5.        chomp($line);
  6.        @champs=split(/:/,$line);
  7.        foreach $v (@champs)
  8.       {
  9.        print $v,"\n";
  10.       }
  11. }


Ahora no sé cómo afichar el resultado con otro script y por último si me piden un usuario por su nombre, cuál es la función Perl que me daría la información.

Agradezco de antemano la lectura y el interés por mi mensaje y bueno, si merezco una ayuda pues me causa mucho placer recibirla.

Buenos días
Raul


Última edición por explorer el 2009-12-12 11:57 @540, editado 1 vez en total
Ortografía, bloques de código


Nota 2009-12-12 12:03 @544
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10268
Re: Perl y Mysql
Bienvenido a los foros de Perl en Español, raul2310.

Estás preguntando cómo cargar la información del fichero de contraseñas, y eso ya lo has hecho con la instrucción SQL LOAD DATA INFILE.

En este sitio tienes un tutorial relativo a lo básico del trabajo con una base de datos, en Perl.

Luego, el trabajo para incorporar más usuarios a la base de datos es con un INSERT y recuperar información, con un SELECT. Las dos son sentencias SQL que desde Perl las puedes ejecutar con la ayuda del módulo DBI, tal como te cuentan en el tutorial.

Prueba, y si tienes algún problema, publica el código y te ayudamos.

_________________
JF^D Perl programming


Nota 2009-12-13 18:50 @826

Perlero Nuevo
Registrado: 2009-12-02 21:34 @940
Mensajes: 2
Re: Perl y Mysql nueva consulta
Buenas tardes.

Mire, disculpe la tanta molestia pero en verdad estoy interesado en aprender. Esto fue lo que logré hacer y me retorna un error. ¿Pudiera usted revisarlo y sugerirme qué hacer? ¡Ah!, de paso perdonen la palabra (utilisador) en lugar de utilizador; es solo para poder nombrar mi variable en francés.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use warnings;
  3. use strict;
  4.  
  5. use DBI;    # cargar le module DBI
  6.  
  7. # Parametros de conexion à la base de datos
  8. my $BaseDeDonnees = "users";
  9. my $NomHote       = "localhost"; # Es posible poner tambien la IP
  10. my $login         = "root";      # login
  11. my $MotDePass     = ""; # No hay password
  12. # Conexion à la base de datos mysql
  13. my $dbh = DBI->connect( "dbi:mysql:dbname=$BaseDeDonnees;host=$NomHote;",
  14.     $login, $MotDePass )
  15.     or die "Conexion imposible à la base de datos $BaseDeDonnees !";
  16.  
  17. # Creacion de tablas
  18. print "Creacion de la tabla Utilisador\n";
  19. my $SQLCreationTablesUtilisador = <<"SQL";
  20. crear table Utilisador(
  21. usager char(20),
  22. fil1 char(1),
  23. uid int,
  24. gid int,
  25. gecos char(30),
  26. rep_home char(50),
  27. programme char(50))
  28. SQL
  29.  
  30. $dbh->do("DROP TABLE IF EXISTS Utilisador;")
  31.     or die "Imposible de suprimir la tabla Utilisador\n\n";
  32. $dbh->do($SQLCreationTablesUtilisador)
  33.     or die "Imposible de crear la tabla Utilisador\n\n";
  34.  
  35. # Lectura de ficheros y insercion de datos
  36. my $FichieUtilisador = "/etc/passwd";
  37. # Fichero Utilisador
  38. print "Insercion de datos en la tabla Utilisador\n";
  39. open( my $FhUtilisador, '<', $FichieUtilisador )
  40.     or die("Imposible de leer el fichero $FichieUtilisador\n");
  41. my $EnteteFichierUtilisador = <$FhUtilisador>;
  42.  
  43. # Insercion de datos
  44. my $RequeteSQLUtilisador = <<"SQL";
  45. load data infile '/etc/passwd' into table Utilisador fields terminated by ":";
  46. SQL
  47.  
  48. my $sthUtilisateur = $dbh->prepare($RequeteSQLUtilisateur);
  49.  
  50. while ( my $ligne = <$FhUtilisador> )
  51.  {
  52.     chomp $ligne;
  53.  my ( $usager, $fil1, $uid, $gid, $gecos, $rep_home, $programme  ) = split( /\t/, $ligne );
  54.  
  55.     $sthUtilisador->execute( $usager, $fil1, $uid, $gid, $gecos, $rep_home, $programme  )
  56.         or die "Fallo Requete $RequeteSQLUtilisateur : $DBI::errstr";
  57. }
  58. close($FhUtilisador);


Nota 2009-12-13 20:23 @891
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10268
Re: Perl y Mysql  RESUELTO
Por favor, publica el error que te sale. Perl es muy expresivo con los errores y casi siempre acierta.

De todas formas, estoy viendo algo rarísimo... has mandado preparar a la base de datos para que ejecute una instrucción de lectura del fichero de usuarios, con lo que al ejecutarla, ya estará leído, pero a continuación, te pones a leer el fichero de usuarios, y por cada uno, ejecutas la sentencia de lectura del fichero entero.

Me temo que te has hecho un lío tremendo...

Una de dos...

* O ejecutas la sentencia SQL de lectura del fichero de usuarios, o

* Lees el fichero de usuarios, y por cada uno, haces un INSERT para meterlo en la base de datos.

Además, en la lectura haces un split() para que separe los campos, separados por tabuladores, pero el fichero /etc/passwd tiene los campos separados por ':'.

_________________
JF^D Perl programming


Responder al tema  [ 4 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO