PERL
Résolu
flongo
Messages postés
53
Date d'inscription
Statut
Membre
Dernière intervention
-
flongo Messages postés 53 Date d'inscription Statut Membre Dernière intervention -
flongo Messages postés 53 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'utilise PERL pour faire du parsing.
Je cherche à extraire un texte qui commence soit par le mot 'Reception' soit 'type' et qui termine par 'FIN IMPORT'.
Lorsqu'un bloc est trouvé (ayant pour debut soit 'Reception' soit 'type' et pour fin 'FIN IMPORT'), je veux qui'il l'ecrive dans un fichier txt.
Voici le code que j'ai écrit mais sans succes :
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
open WRITER, ">P:\\Prog_perl\\infos_pivot1.txt" or die "Le fichier ne peut etre édité!";
my $Ligne;
while ($Ligne=<FICHIER>)
{
if ($Ligne =~/(Reception)-(.*) .FIN IMPORT/)
{
print WRITER $fichier;
}
}
while ($fichier = <FICHIER>)
{
print $fichier;
}
close fichier;
Quelqu'un peut il m'aider a trouver l'erreur, je suis novice dans ce langage.
Merci bien.
J'utilise PERL pour faire du parsing.
Je cherche à extraire un texte qui commence soit par le mot 'Reception' soit 'type' et qui termine par 'FIN IMPORT'.
Lorsqu'un bloc est trouvé (ayant pour debut soit 'Reception' soit 'type' et pour fin 'FIN IMPORT'), je veux qui'il l'ecrive dans un fichier txt.
Voici le code que j'ai écrit mais sans succes :
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
open WRITER, ">P:\\Prog_perl\\infos_pivot1.txt" or die "Le fichier ne peut etre édité!";
my $Ligne;
while ($Ligne=<FICHIER>)
{
if ($Ligne =~/(Reception)-(.*) .FIN IMPORT/)
{
print WRITER $fichier;
}
}
while ($fichier = <FICHIER>)
{
print $fichier;
}
close fichier;
Quelqu'un peut il m'aider a trouver l'erreur, je suis novice dans ce langage.
Merci bien.
A voir également:
- PERL
- Denon perl pro test - Accueil - Audio
- Active perl - Télécharger - Édition & Programmation
- DzSoft Perl Editor - Télécharger - Édition & Programmation
- Comment lire un fichier .pl perl ? - Forum Windows
- Perl: transformer un fichier en package ✓ - Forum Perl
7 réponses
Salut,
Reception et FIN IMPORT sont sur la même ligne ?
Si c'est le cas, essais :
Cdlt
Reception et FIN IMPORT sont sur la même ligne ?
Si c'est le cas, essais :
if($Ligne=~/Reception (.*) FIN IMPORT/) { print WRITER $1; }
Cdlt
Dans ce cas-là, utilise plutôt :
my @lignes=<FICHIER>: my $ligne=join('',@lignes); # pour tout mettre le fichier dans $ligne print $1 if ($ligne =~ /Reception (.*) FIN IMPORT/s); close(FICHIER);
Excuse moi, je me suis trompé de prog: voila ce que tu m'as dit de mettre mais ca fonctionne tjrs pas:
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
my @lignes=<FICHIER>;
my $ligne=join('',@lignes); # pour tout mettre le fichier dans $ligne
if ($ligne =~/ Reception (.*) FIN IMPORT /s){
print $ligne; # en mettant ici print $1 ca ne fonctionne pas non plus
}
close (FICHIER);
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
my @lignes=<FICHIER>;
my $ligne=join('',@lignes); # pour tout mettre le fichier dans $ligne
if ($ligne =~/ Reception (.*) FIN IMPORT /s){
print $ligne; # en mettant ici print $1 ca ne fonctionne pas non plus
}
close (FICHIER);
Salut,
Ben, au lieu de faire un join pourquoi pas utiliser le mode slurp
Au lieu de
my @lignes=<FICHIER>:
my $ligne=join('',@lignes);
Mais plus élégant c'est d'utiliser la lecture par paragraphes http://www.commentcamarche.net/forum/affich 11868354 perl?#7
Ben, au lieu de faire un join pourquoi pas utiliser le mode slurp
Au lieu de
my @lignes=<FICHIER>:
my $ligne=join('',@lignes);
{ undef $/ and $fichier=<FICHIER>; }
Mais plus élégant c'est d'utiliser la lecture par paragraphes http://www.commentcamarche.net/forum/affich 11868354 perl?#7
Merci pour ton aide! Ca fonctionne tjrs pas! Le fichier txt que je veux créer ne se fait pas. Je te remet le code, il doit y avoir une erreur mais je la vois pas:
print "BIENVENUE DANS L EXTRACTION DES INFORMATIONS DANS LES LOGS!\n";
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
open WRITER, ">P:\\Prog_perl\\infos_pivot1.txt" or die "Le fichier ne peut etre édité!";
my $Ligne;
while ($Ligne=<FICHIER>) {
if ($Ligne =~/Reception (.*) FIN IMPORT/s){
print $1;
}
}
close FICHIER;
close WRITER;
open FICHIER,"<P:\\Prog_perl\\infos_pivot1.txt" or die "Le fichier n'existe pas !";
while ($ligne = <FICHIER>){
print $ligne;
}
close FICHIER;
Merci pour ton aide.
print "BIENVENUE DANS L EXTRACTION DES INFORMATIONS DANS LES LOGS!\n";
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
open WRITER, ">P:\\Prog_perl\\infos_pivot1.txt" or die "Le fichier ne peut etre édité!";
my $Ligne;
while ($Ligne=<FICHIER>) {
if ($Ligne =~/Reception (.*) FIN IMPORT/s){
print $1;
}
}
close FICHIER;
close WRITER;
open FICHIER,"<P:\\Prog_perl\\infos_pivot1.txt" or die "Le fichier n'existe pas !";
while ($ligne = <FICHIER>){
print $ligne;
}
close FICHIER;
Merci pour ton aide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
le soucis viens je pense de la capture du texte :
if ($Ligne =~/Reception (.*) FIN IMPORT/s) Je pense qu'il faut mettre des guillemets à FIN IMPORT et Reception.
Fais un test de capture simple avec et sans guillements pour tester.
Le code de fiddy est bon, normalement ça devrait marcher.
if ($Ligne =~/Reception (.*) FIN IMPORT/s) Je pense qu'il faut mettre des guillemets à FIN IMPORT et Reception.
Fais un test de capture simple avec et sans guillements pour tester.
Le code de fiddy est bon, normalement ça devrait marcher.
Salut,
J'ai fait ce que tu m'as conseillé:
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
my @lignes=<FICHIER>;
my $ligne=join('',@lignes); # pour tout mettre le fichier dans $ligne
print $1 if ($ligne =~ / "Reception" (.*) "FIN IMPORT" /s);
close (FICHIER);
Mais ca fonctionne pas!
J'ai fait ce que tu m'as conseillé:
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
my @lignes=<FICHIER>;
my $ligne=join('',@lignes); # pour tout mettre le fichier dans $ligne
print $1 if ($ligne =~ / "Reception" (.*) "FIN IMPORT" /s);
close (FICHIER);
Mais ca fonctionne pas!
ok
Voila ce que j'ai mis et ca fonctionne tjs pas :
print "BIENVENUE DANS L EXTRACTION DES INFORMATIONS DANS LES LOGS!\n";
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
my @lignes=<FICHIER>;
my $ligne=join('',@lignes); # pour tout mettre le fichier dans $ligne
print $1 if ($ligne =~ / Reception (.*) FIN IMPORT /s);
close (FICHIER);
Le pbme peut etre du à quoi?
Voila ce que j'ai mis et ca fonctionne tjs pas :
print "BIENVENUE DANS L EXTRACTION DES INFORMATIONS DANS LES LOGS!\n";
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
my @lignes=<FICHIER>;
my $ligne=join('',@lignes); # pour tout mettre le fichier dans $ligne
print $1 if ($ligne =~ / Reception (.*) FIN IMPORT /s);
close (FICHIER);
Le pbme peut etre du à quoi?
Je t'explique ce qui ne fonctionne pas: lorsque je mets print $1, l'affichage sur l'ecran ne se fait pas.
Maintenant quand je mets print WRITER $1, ca ne fonctionne pas non plus.
Donc au final j'ai essayé cela:
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
open WRITER, ">P:\\Prog_perl\\1.txt" or die "Le fichier ne peut etre édité!";
my @lignes=<FICHIER>;
my $ligne=join('',@lignes); # pour tout mettre le fichier dans $ligne
print WRITER $1 if ($ligne =~ / Reception (.*) FIN IMPORT /s);
close (FICHIER);
close (WRITER);
open FICHIER,"<P:\\Prog_perl\\1.txt" or die "Le fichier n'existe pas !";
while ($sor = <FICHIER>){
print $sor;
}
close (FICHIER);
Ce ne fonctionne pas non plus.
Merci de ton aide
Maintenant quand je mets print WRITER $1, ca ne fonctionne pas non plus.
Donc au final j'ai essayé cela:
open FICHIER,"<P:\\Prog_perl\\edital_pivot1.txt" or die "Ce fichier n'existe pas!";
open WRITER, ">P:\\Prog_perl\\1.txt" or die "Le fichier ne peut etre édité!";
my @lignes=<FICHIER>;
my $ligne=join('',@lignes); # pour tout mettre le fichier dans $ligne
print WRITER $1 if ($ligne =~ / Reception (.*) FIN IMPORT /s);
close (FICHIER);
close (WRITER);
open FICHIER,"<P:\\Prog_perl\\1.txt" or die "Le fichier n'existe pas !";
while ($sor = <FICHIER>){
print $sor;
}
close (FICHIER);
Ce ne fonctionne pas non plus.
Merci de ton aide