Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Langage
Langage Toutes vos questions sur les scripts Perl en général. Avant de poster, veuillez consulter les FAQs perl, les cours Perl, les critiques de livres et les sources Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/02/2013, 13h55   #1
arm3366
Membre confirmé
 
" "
Inscription : janvier 2008
Messages : 309
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 309
Points : 204
Points : 204
Par défaut lecture de fichier

Bonjour,
J'essaye d'importer des données dans une base de données via Perl en utilisant le module DBI.
J'ai repris l'exemple de Djibril dans ce tuto.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 
#!/usr/bin/perl -w
 
use warnings; 
use strict; 
use diagnostics;
use DBI;                    # Charger le module DBI 
use vars qw/ $VERSION /;    # Version du script 
$VERSION = '1.0'; 
 
# Paramètres de connexion à la base de données 
my $bd          = 'mybd; 
my $serveur     = 'serv1';    # Il est possible de mettre une adresse IP 
my $identifiant = 'bdd1';         # Identifiant 
my $motdepasse  = 'bdd1pass';        # Nous n'avons pas de mot de passe 
 
# Connexion à la base de données MySQL 
my $dbh = DBI->connect("dbi:mysql:dbname=$bd;host=$serveur;", $identifiant, $motdepasse ) 
or die "Connexion impossible a la base de donnees $bd !"; 
 
# Création des tables 
print "Creation de la table UltraSonTHERM\n"; 
 
my $sql_creation_table_regions = <<"SQL";
CREATE TABLE UltraSonTHERM( 
	id_ultrason INT UNSIGNED NOT NULL AUTO_INCREMENT,
	date DATETIME NOT NULL,
	ultrasoundID TINYINT,
	value SMALLINT UNSIGNED,
	PRIMARY KEY (id_ultrason)
)COMMENT ='Capteurs ultra son pour maxity thermique';
SQL
 
$dbh->do('DROP TABLE IF EXISTS UltraSonTHERM;') or die "Impossible de supprimer la table UltraSonTHERM\n\n";
$dbh->do($sql_creation_table_regions) or die "Impossible de créer la table UltraSonTHERM\n\n";
 
# Lecture des fichiers et insertion des données 
my $fichier_ultrason      = 'bigfileUltrason_THERM.txt'; 
#print "$fichier_ultrason \n";
 
# Fichier UltraSonTHERM 
print "Insertion des donnees dans la table UltraSonTHERM\n"; 
open my $fh_ultrason,'<', $fichier_ultrason or die "Impossible de lire le fichier $fichier_ultrason\n"; 
#open(my $fh_ultrason, "<bigfileUltrason_THERM.txt") or die "Impossible de lire le fichier $fichier_ultrason\n"; 
my $entete_fichier_region = <$fh_ultrason>; 
 
# Insertion des données 
my $requete_sql_region = <<"SQL"; 
  INSERT INTO UltraSonTHERM (date,ultrasoundID,value) VALUES ( ?, ?, ?);
SQL
 
 
my $sth_regions = $dbh->prepare($requete_sql_region) or die $dbh->errstr; 
while ( my $ligne = <$fh_ultrason> ) { 
  chomp $ligne; 
  my ($Date,$UltrasoundID,$Value) = split /\t/, $ligne; 
  $sth_regions->execute($Date,$UltrasoundID,$Value) 
    or die "Echec Requête $requete_sql_region : $DBI::errstr"; 
} 
close $fh_ultrason; 
 
# Déconnexion de la base de données 
$dbh->disconnect();
Quand j’exécute le script, j'arrive à me connecter et à créer la table sur la base de données MySQL et j'obtiens à la fin cette erreur
Code :
1
2
3
4
 
Insertion des donnees dans la table UltraSonTHERM
Uncaught exception from user code:
        Impossible de lire le fichier bigfileUltrason_THERM.txt
J'ai besoin un peu d'aide pour corriger ce bug.
Merci
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 18h13   #2
dmganges
Membre confirmé
 
Avatar de dmganges
 
Homme Michel DUFOUR
Administrateur Unix / Oracle retraité
Inscription : septembre 2011
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Michel DUFOUR
Âge : 60
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Administrateur Unix / Oracle retraité
Secteur : Service public

Informations forums :
Inscription : septembre 2011
Messages : 213
Points : 230
Points : 230
Bonjour,
As-tu pu lire ton fichier ailleurs ?

Mis à part un problème d'encodage je ne vois pas, et encore c'est pour le fun !

Le mieux serait que ton fichier soit en utf8
Fait un essais d'ouverture en précisant le code :
Code :
1
2
3
4
5
6
7
8
9
 
open ( IN, '<:encoding(UTF-8)', $fichier_ultrason )
	or die "Impossible ouvrir fichier $fichier_ultrason en lecture\n";
 
while ( my $Ligne = <IN> ) {
...
}
 
close ( IN);
Le lien que tu donnes sur le tuto de djibril est mort !
dmganges est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 08h39   #3
PadawanInPerl
Membre habitué
 
Avatar de PadawanInPerl
 
Inscription : juillet 2009
Messages : 370
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : juillet 2009
Messages : 370
Points : 110
Points : 110
Hello,

ton fichier texte est-il à l'emplacement de ton script ?
__________________
Windows 7, 64 bit
Perl 5.12, ActivePerl
Python 3.2, ActivePython ( NOVICE ! )
PadawanInPerl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 13h13   #4
arm3366
Membre confirmé
 
" "
Inscription : janvier 2008
Messages : 309
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 309
Points : 204
Points : 204
Bonjour,
Merci pour vos réponses. Je remet le lien du tuto.
Sinon j'ai mis le script perl et le fichier dans le même répertoire et pour exécuter je fais
Code :
perl A:\ScriptPerl\perldbi.pl
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2013, 13h44   #5
Jiheme44
Membre du Club
 
Homme Jean Michel
Ingénieur intégration
Inscription : décembre 2012
Messages : 26
Détails du profil
Informations personnelles :
Nom : Homme Jean Michel
Localisation : France

Informations professionnelles :
Activité : Ingénieur intégration

Informations forums :
Inscription : décembre 2012
Messages : 26
Points : 46
Points : 46
c'est juste un problème de chemin.
2 solutions :
déplace toi dans le répertoire "A:\ScriptPerl\" avant de lancer le script perl

ou complète le chemin du ficher dans le script :
Code :
1
2
3
4
5
 
...
# Lecture des fichiers et insertion des données 
my $fichier_ultrason      = "A:\\ScriptPerl\\bigfileUltrason_THERM.txt";
...
Jiheme44 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/02/2013, 17h49   #6
arm3366
Membre confirmé
 
" "
Inscription : janvier 2008
Messages : 309
Détails du profil
Informations professionnelles :
Activité : " "

Informations forums :
Inscription : janvier 2008
Messages : 309
Points : 204
Points : 204
Bien vue @Jiheme44. Le problème est résolu

Grand merci à vous tous !!!
arm3366 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h02.


 
 
 
 
Partenaires

Hébergement Web