2009-12-12 11:26 @518 |
|
|
raul2310
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.sqlUsing 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 Using perl Syntax Highlighting #!/usr/bin/perl -w
open(fic_in,"/etc/passwd") || die "erreur d'ouverture du fichier ...\n";
while($line=<fic_in>)
{
chomp($line);
@champs=split(/:/,$line);
foreach $v (@champs)
{
print $v,"\n";
}
}
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 |
|
2009-12-12 12:03 @544 |
|
|
 |
explorer
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
|
2009-12-13 18:50 @826 |
|
|
raul2310
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. Using perl Syntax Highlighting #!/usr/bin/perl -w
use warnings;
use strict;
use DBI; # cargar le module DBI
# Parametros de conexion à la base de datos
my $BaseDeDonnees = "users";
my $NomHote = "localhost"; # Es posible poner tambien la IP
my $login = "root"; # login
my $MotDePass = ""; # No hay password
# Conexion à la base de datos mysql
my $dbh = DBI->connect( "dbi:mysql:dbname=$BaseDeDonnees;host=$NomHote;",
$login, $MotDePass )
or die "Conexion imposible à la base de datos $BaseDeDonnees !";
# Creacion de tablas
print "Creacion de la tabla Utilisador\n";
my $SQLCreationTablesUtilisador = <<"SQL";
crear table Utilisador(
usager char(20),
fil1 char(1),
uid int,
gid int,
gecos char(30),
rep_home char(50),
programme char(50))
SQL
$dbh->do("DROP TABLE IF EXISTS Utilisador;")
or die "Imposible de suprimir la tabla Utilisador\n\n";
$dbh->do($SQLCreationTablesUtilisador)
or die "Imposible de crear la tabla Utilisador\n\n";
# Lectura de ficheros y insercion de datos
my $FichieUtilisador = "/etc/passwd";
# Fichero Utilisador
print "Insercion de datos en la tabla Utilisador\n";
open( my $FhUtilisador, '<', $FichieUtilisador )
or die("Imposible de leer el fichero $FichieUtilisador\n");
my $EnteteFichierUtilisador = <$FhUtilisador>;
# Insercion de datos
my $RequeteSQLUtilisador = <<"SQL";
load data infile '/etc/passwd' into table Utilisador fields terminated by ":";
SQL
my $sthUtilisateur = $dbh->prepare($RequeteSQLUtilisateur);
while ( my $ligne = <$FhUtilisador> )
{
chomp $ligne;
my ( $usager, $fil1, $uid, $gid, $gecos, $rep_home, $programme ) = split( /\t/, $ligne );
$sthUtilisador->execute( $usager, $fil1, $uid, $gid, $gecos, $rep_home, $programme )
or die "Fallo Requete $RequeteSQLUtilisateur : $DBI::errstr";
}
close($FhUtilisador);
|
2009-12-13 20:23 @891 |
|
|
 |
explorer
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
|
|
Página 1 de 1
|
[ 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
|
|
Socializa |
 |
|