Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Inactif
    " "
    Inscrit en
    janvier 2008
    Messages
    330
    Détails du profil
    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : janvier 2008
    Messages : 330
    Points : 213
    Points
    213

    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

  2. #2
    Membre chevronné Avatar de dmganges
    Homme Profil pro Michel DUFOUR
    Administrateur Unix / Oracle retraité
    Inscrit en
    septembre 2011
    Messages
    455
    Détails du profil
    Informations personnelles :
    Nom : Homme Michel DUFOUR
    Âge : 61
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : septembre 2011
    Messages : 455
    Points : 620
    Points
    620

    Par défaut

    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 !

  3. #3
    Membre habitué Avatar de PadawanInPerl
    Profil pro
    Inscrit en
    juillet 2009
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : juillet 2009
    Messages : 403
    Points : 124
    Points
    124

    Par défaut

    Hello,

    ton fichier texte est-il à l'emplacement de ton script ?
    Windows 7, 64 bit
    Perl 5.12, ActivePerl
    Python 3.2, ActivePython ( NOVICE ! )

  4. #4
    Inactif
    " "
    Inscrit en
    janvier 2008
    Messages
    330
    Détails du profil
    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : janvier 2008
    Messages : 330
    Points : 213
    Points
    213

    Par défaut

    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

  5. #5
    Membre régulier
    Homme Profil pro Jean Michel
    Ingénieur intégration
    Inscrit en
    décembre 2012
    Messages
    43
    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 : 43
    Points : 90
    Points
    90

    Par défaut

    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";
    ...

  6. #6
    Inactif
    " "
    Inscrit en
    janvier 2008
    Messages
    330
    Détails du profil
    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : janvier 2008
    Messages : 330
    Points : 213
    Points
    213

    Par défaut

    Bien vue @Jiheme44. Le problème est résolu

    Grand merci à vous tous !!!

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •