Parser fichier txt en PERL
Résolu/Fermé
KrSt
Messages postés
8
Date d'inscription
lundi 12 mars 2007
Statut
Membre
Dernière intervention
20 mars 2007
-
12 mars 2007 à 16:11
Speedbug - 4 mai 2010 à 09:38
Speedbug - 4 mai 2010 à 09:38
A voir également:
- Parser fichier txt en PERL
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier host - Guide
- Ouvrir fichier .bin - Guide
7 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 mars 2007 à 16:20
12 mars 2007 à 16:20
Il faut préciser ce que tu veux faire avec les variables
Voilà ton code un peu modifier
Voilà ton code un peu modifier
#!/usr/bin/perl use strict;use warnings; open FICHIER,"< monfichier.log" or die "E/S : $!\n"; while (my $ligne = <FICHIER>){ my ($date,$heure,$elem,$adIP,$statut) = split /;/,$ligne; # traitment des variables ..... ..... } close FICHIER;
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 mars 2007 à 19:09
12 mars 2007 à 19:09
Je ne comprends pas très bien ce que tu veux.
Si tu veux utiliser les valeurs contenus dans ton fichier, pourquoi tu récupères les données depuis un formulaire.
Il faut faire le traitement dans la boucle pour chaque ligne.
Donc tu te connectes à ta base avant la boucle while, et enusite tu applique le traitement pour chaque ligne.
Juste un exemple pour me faire comprendre
Si tu veux utiliser les valeurs contenus dans ton fichier, pourquoi tu récupères les données depuis un formulaire.
Il faut faire le traitement dans la boucle pour chaque ligne.
Donc tu te connectes à ta base avant la boucle while, et enusite tu applique le traitement pour chaque ligne.
Juste un exemple pour me faire comprendre
#!/usr/bin/perl use strict;use warnings; my ($date,$heure,$elem,$adIP,$statut); while (my $ligne = <DATA>){ ($date,$heure,$elem,$adIP,$statut) = split /;/,$ligne; # dans la boucle on lit chaque ligne # et ensuite j'affiche le contenu de variables print "***** DANS LA BOUCLE *****\n"; print "\$date : $date\n"; print "\$heure : $heure\n"; print "\$elem : $elem\n"; print "\$adIP : $adIP\n"; print "\$statut: $statut\n"; } # à l'exterieur de la boucle # on affiche seulement la dernière ligne # le trataitement il faut l'exécuter dans la boucle print "===== A L'EXTERIEUR DE LA BOUCLE =====\n"; print "\$date : $date\n"; print "\$heure : $heure\n"; print "\$elem : $elem\n"; print "\$adIP : $adIP\n"; print "\$statut: $statut\n"; __END__ 2007:02:18;14:55;AG4561_2;192.168.0.27;ok 2007:02:18;15:25;Serveur_X12;192.168.0.231;ok
KrSt
Messages postés
8
Date d'inscription
lundi 12 mars 2007
Statut
Membre
Dernière intervention
20 mars 2007
1
13 mars 2007 à 09:13
13 mars 2007 à 09:13
Merci beaucoup pour ton aide !
Je devrais pouvoir m'en sortir avec tout ça :-)
Je n'ai pas la possibilité de tester maintenant mais à priori ça colle parfaitement à ce que je cherchais.
Merci bien !
Je devrais pouvoir m'en sortir avec tout ça :-)
Je n'ai pas la possibilité de tester maintenant mais à priori ça colle parfaitement à ce que je cherchais.
Merci bien !
#!/usr/bin/perl -w use strict; use DBI; use CGI; my $cgi = new CGI; my ($date,$heure,$elem,$adIP,$statut); print "Content-type: text/html\n\n"; open FICHIER,"< monfichier.log" or die "Le fichier n'existe pas ! : $!\n"; #Connection à la base de données mysql NomBase my $db = DBI -> connect (("dbi:mysql:dbname=NomBase;host=localhost;","root","******")) or die "connection impossible!"; while ($ligne = <FICHIER>){ # récupération des éléments ($date,$heure,$elem,$adIP,$statut) = split /;/,$ligne; # et on insere dans la base $db->do("insert into client values ('$date', '$heure', '$elem', '$adIP', '$statut')"); or die "pb de requete : $DBI::errstr"; }# fin de traitement de fichier close FICHIER;
Il manque la déclaration de ta variable $ligne...
my $ligne;
sinon ça marche pas... ;)
#!/usr/bin/perl
use warnings;
use strict;
use DBI;
use CGI;
my $cgi = new CGI;
my ($date,$heure,$elem,$adIP,$statut);
my $fichier = "< /chemin/vers/fichier/monfichier.log";
my $ligne;
print "Content-type: text/html\n\n";
open FICHIER,$fichier or die "Le fichier n'existe pas ! : $!\n";
#Connection à la base de données mysql test
my $db = DBI -> connect (("dbi:mysql:dbname=test;host=localhost;","root","******")) or die "connection impossible!";
while ($ligne=<FICHIER>){
# récupération des éléments
($date,$heure,$elem,$adIP,$statut) = split /;/,$ligne;
# et on insere dans la base
$db->do("INSERT INTO journaux VALUES ('$date', '$heure', '$elem', '$adIP', '$statut')") or die "pb de requete : $DBI::errstr";
}
# fin de traitement de fichier
close FICHIER;
Ce script fonctionne parfaitement, il a été testé.
my $ligne;
sinon ça marche pas... ;)
#!/usr/bin/perl
use warnings;
use strict;
use DBI;
use CGI;
my $cgi = new CGI;
my ($date,$heure,$elem,$adIP,$statut);
my $fichier = "< /chemin/vers/fichier/monfichier.log";
my $ligne;
print "Content-type: text/html\n\n";
open FICHIER,$fichier or die "Le fichier n'existe pas ! : $!\n";
#Connection à la base de données mysql test
my $db = DBI -> connect (("dbi:mysql:dbname=test;host=localhost;","root","******")) or die "connection impossible!";
while ($ligne=<FICHIER>){
# récupération des éléments
($date,$heure,$elem,$adIP,$statut) = split /;/,$ligne;
# et on insere dans la base
$db->do("INSERT INTO journaux VALUES ('$date', '$heure', '$elem', '$adIP', '$statut')") or die "pb de requete : $DBI::errstr";
}
# fin de traitement de fichier
close FICHIER;
Ce script fonctionne parfaitement, il a été testé.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
KrSt
Messages postés
8
Date d'inscription
lundi 12 mars 2007
Statut
Membre
Dernière intervention
20 mars 2007
1
12 mars 2007 à 16:49
12 mars 2007 à 16:49
Wow ! Merci pour la rapidité de réponse !
En fait je veux inserer le contenu des variables dans une base MySQL ...
J'avais continué à modifier mon code entre temps :
Voila, donc je ne sais pas si la syntaxe est exacte vu que c'est mon premier code en PERL, mais ce qui me pose le plus de probleme c'est la recherche pour recuperer les differents element du fichier texte (adresse ip etc ... )
En fait je veux inserer le contenu des variables dans une base MySQL ...
J'avais continué à modifier mon code entre temps :
#!/usr/bin/perl -w use strict; use DBI; use CGI; my($cgi) = new CGI; print "Content-type: text/html\n\n"; open FICHIER,"< monfichier.log" or die "Le fichier n'existe pas !"; while ($ligne = <FICHIER>) { if($ligne =~ ( chaine de recherche que je ne sais pas ecrire ) { my $date = $1; my $heure = $2; my $elem = $3; my $adIP = $4; my $statut = $5; } } #Connection à la base de données mysql NomBase my $db = DBI -> connect (("dbi:mysql:dbname=NomBase;host=localhost;","root","******")) or die "connection impossible!"; #recuperation puis insertion d une donnee my($date) = $cgi->param("date"); my($heure) = $cgi->param("heure"); my($elem) = $cgi->param("elem"); my($adIP) = $cgi->param("IP"); my($statut) = $cgi->param("Statut"); $db->do("insert into client values ('$date', '$heure', '$elem', '$adIP', '$statut');")|| die "pb de requete : $DBI::errstr"; close FICHIER;
Voila, donc je ne sais pas si la syntaxe est exacte vu que c'est mon premier code en PERL, mais ce qui me pose le plus de probleme c'est la recherche pour recuperer les differents element du fichier texte (adresse ip etc ... )
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 mars 2007 à 19:22
12 mars 2007 à 19:22
Ca doit être quelque chose comme ça
Tu n'as pas besoin de
if($ligne =~ ( chaine de recherche que je ne sais pas ecrire )
split est suffisant vu que les données sont séparées par point-virgule
#!/usr/bin/perl -w use strict; use DBI; use CGI; my $cgi = new CGI; my ($date,$heure,$elem,$adIP,$statut); print "Content-type: text/html\n\n"; open FICHIER,"< monfichier.log" or die "Le fichier n'existe pas ! : $!\n"; #Connection à la base de données mysql NomBase my $db = DBI -> connect (("dbi:mysql:dbname=NomBase;host=localhost;","root","******")) or die "connection impossible!"; while ($ligne = <FICHIER>){ # récupération des éléments ($date,$heure,$elem,$adIP,$statut) = split /;/,$ligne; # et on insere dans la base $db->do("insert into client values ('$date', '$heure', '$elem', '$adIP', '$statut')"); or die "pb de requete : $DBI::errstr"; }# fin de traitement de fichier close FICHIER;
Tu n'as pas besoin de
if($ligne =~ ( chaine de recherche que je ne sais pas ecrire )
split est suffisant vu que les données sont séparées par point-virgule
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 mars 2007 à 19:33
12 mars 2007 à 19:33
Salut,
dans ton cas je pense que c'est suffisant d'utiliser
dans ton cas je pense que c'est suffisant d'utiliser