Le programme suivant est censé ouvrir tous les fichiers *.dat de mon dossier et d'insérer ces données dans une table MySQL.

Je viens de récupérer d'autres fichiers mais je me retrouve avec des problèmes d'ouverture de fichier ...

J'ai eu le même genre de soucis auparavant, je réglais le problème en déplaçant les fichiers, puis en les replaçant dans le bon dossier.
Pas super conventionnel comme méthode, d'autant plus que le tout est synchronisé et je ne gère pas les erreurs d'ouverture de fichier ...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
use DBI;
use CGI;
$co = new CGI;
 
$database="arpwatch", $hostname="localhost", $login="arpwatch";
$mdp="%+arpwatch";
 
$dsn = "DBI:mysql:database=$database;host=$hostname";
$dbh = DBI->connect($dsn, $login, $mdp) or die "Echec de connexion";
 
my ($fichier, $dossier) = (undef, '/home/belloise/collecte');
opendir (my $dir, $dossier) or die "$dossier n'existe pas !";
my @files = readdir $dir;
foreach $fichier (@files) 
 
{
open(fichier, $fichier) or die "Problème lors de l'ouverture de $fichier\n"; 
my $ligne;
while ($ligne = <fichier>)
{
    if($ligne =~ /(.*)\t(.*)\t(.*)\t(.*)\t.*/)
    {
        my $mac = $1, $ip = $2, $epoch = $3, $texte = $4;
        my $requete_verif = "SELECT * FROM enregistrement WHERE mac = '$mac' AND ip = '$ip' AND epoch = '$epoch' 
        AND source = '$fichier'";
        my $sth_verif = $dbh->prepare($requete_verif) or die "erreur de préparation\n";
        $sth_verif ->execute() or die "erreur d'exécution\n";
        my $rows = $sth_verif->rows;
        $sth_verif->finish;
 
        # si le nombre d'enregistrements récupérés est égal à zéro
        if ($rows == 0)
	{
            my $requete = "INSERT INTO enregistrement (mac, ip, epoch, texte, source, date_enregistrement ) VALUES ('$mac',
            '$ip', '$epoch', '$texte', '$fichier', NOW())";
            my $sth = $dbh->prepare($requete) or die "erreur de préparation\n";
            $sth->execute() or die "erreur d'exécution\n";
	    $sth->finish;
        }
    }
    else
    {
    }
}
close (fichier, $fichier);
}
$dbh->disconnect;
closedir $dir;