Problem de split

Fermé
montisero Messages postés 65 Date d'inscription jeudi 4 septembre 2014 Statut Membre Dernière intervention 18 mars 2016 - Modifié par montisero le 23/02/2015 à 17:54
montisero Messages postés 65 Date d'inscription jeudi 4 septembre 2014 Statut Membre Dernière intervention 18 mars 2016 - 23 févr. 2015 à 17:34
Bonjour,
J'ai un problem au niveau de l'insertion dans ma base mysql ,il m'affiche toujours que la valeur du champ Port est null , donne moi vos aide svp .
voiçi le message d'erreur " DBD::mysql::st execute failed: Column 'Port' cannot be null at bd_copy.pl line 46, <$fh_regions> line 2 "

mon code est celui là :

use warnings;
use strict;
use Encode;
use utf8;
use DBI; # Charger le module DBI
use vars qw/ $VERSION /; # Version du script
$VERSION = '1.0';

ActiverAccents();

# Paramètres de connection à la base de données
my $bd = 'switchs';
my $serveur = 'localhost'; # Il est possible de mettre une adresse IP
my $identifiant = 'root'; # identifiant
my $motdepasse ='';
my $port = '3306'; #Si vous ne savez pas, ne rien mettre

# Connection à la base de données mysql
print "Connexion à la base de données $bd\n";
my $dbh = DBI->connect( "DBI:mysql:database=$bd;host=$serveur;port=$port",$identifiant,$motdepasse, {
RaiseError => 1,
}
) or die "Connection impossible à la base de données $bd !\n $! \n $@\n$DBI::errstr";

# Lecture des fichiers et insertion des données
my $fichier_regions = '/root/Desktop/switch_10/show_Inter_Status_txt';


# Fichier Region
print "Insertion des données dans la table Switch_10\n";
open my $fh_regions, '<:encoding(UTF-8)', $fichier_regions or die "Impossible de lire le fichier $fichier_regions\n";
my $entete_fichier_region = <$fh_regions>;

# Insertion des données
my $requete_sql_region = <<"SQL";
INSERT INTO Switch_10(Port,Name,Status,Vlan,Duplex,Speed,Type)
VALUES (?, ?, ?, ?, ?, ?, ? );
SQL

my $sth_regions = $dbh->prepare($requete_sql_region);

while ( my $ligne = <$fh_regions> ) {
chomp $ligne;
# my ( $VLan, $Name, $Status, $Port ) = split /\t/, $ligne;
my ($Port,$Name,$Status,$Vlan,$Duplex,$Speed,$Type) = split/,/,$ligne;
$sth_regions->execute()
or die "Echec Requête $requete_sql_region : $DBI::errstr";
}
close $fh_regions;



# Déconnection de la base de données
$dbh->disconnect();

#==============================================================
# Pour avoir les accents sur la console DOS ou non
# https://perl.developpez.com/faq/perl/?page=Terminal#Accents
#==============================================================
sub ActiverAccents {
my $encodage;
# Windows
if ( lc($^O ) eq 'mswin32') {
eval {
my ($codepage) = ( `chcp` =~ m/:\s+(\d+)/ );
$encodage = "cp$codepage";
foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
binmode $h, ":encoding($encodage)";
}
};
}
else {
$encodage = `locale charmap`;
eval {
foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
binmode $h, ":encoding($encodage)";
}
};
}
return $encodage;
}
A voir également:

1 réponse

montisero Messages postés 65 Date d'inscription jeudi 4 septembre 2014 Statut Membre Dernière intervention 18 mars 2016
23 févr. 2015 à 17:34
Voiçi le contenu de mon fichier qui contient les données :

Fa0/1,W,connected,71,a-full,a-100,10/100BaseTX
Fa0/2,W,connected,61,a-full,a-100,10/100BaseTX
Fa0/3,W,notconnect,141,auto,auto,10/100BaseTX
Fa0/4,W,connected,161,a-full,a-100,10/100BaseTX
Fa0/5,W,notconnect,111,auto,auto,10/100BaseTX
Fa0/6,W,notconnect,96,auto,auto,10/100BaseTX
Fa0/7,S,QL,notconnected,60,a-full,a-100,10/100BaseTX
0