IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Recupérer des lignes dans un fichier ou une variable


Sujet :

Langage Perl

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut Recupérer des lignes dans un fichier ou une variable
    Bonjour,

    Je souhaiterai ouvrir un fichier et récupérer les lignes qui contiennent les mots ""From=", "To=", "Msg-File".

    exemple de fichier :
    From=XX@monsite.com;
    To= YY@destination.com;
    Subject= 123456;
    Msg-File=test1.txt;

    Et une fois ces lignes récupérer, je voudrais affecter la partie derrière le signe = à des variables. comme la variable $destinaire = XX@monsite.com.... $expediteur.....

    voici le départ de mon script, j'arrive bien à récuperer les lignes dans un fichier, mais aprés je cale ! peut etre devrais je les récupére dans un tableau ??

    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
     
     
    use strict;
    use warnings;
     
    my $DirLogMDP = "C:/Perl/Monrepertoire" ;
    my $FicLog;
    my @GestionTableau = ("From=", "To=", "Msg-File");
    my $FicError="C:/Perl/Monrepertoire/error.txt";
    my $Ligne;
     
    open (FIC, "<${DirLogMDP}/fic.txt") || die "Ouverture impossible du fichier fic.txt : $!";
    open (FICERREUR, ">$FicError")  || die "Ouverture impossible du fichier  FicError : $!";
     
    	while ($Ligne = <FIC> ) 
       	{  
    		if (grep { $Ligne =~ m/$_/g } @GestionTableau) { 
       			print FICERREUR  "$Ligne" ; 
       		}
     
                }
     
    close (FIC); 
    close (FICERREUR);
    exit;

    merci pour votre aide

  2. #2
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Bonsoir.

    Je pense que l'utilisation des références arrières des regex peut t'être fort utile
    Je te donne la syntaxe pour récupérer uniquement test1.txt; dans Msg-File=test1.txt; à toi de voir ce que tu peux en faire.
    Supposons que que Msg-File=test1.txt; soit contenu dans $ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ligne =~ m/=(.*)/;
    my $var = $1;
    #ou en plus court
    my ($var) = $ligne =~ m/=(.*)/;
    Attention, avec cette syntaxe tu vas aussi récupérer le ; en fin de ligne
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    et comment puis je faire pour retirer mon ; en fin de ligne.

    merci

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 581
    Points : 2 029
    Points
    2 029
    Par défaut
    s/;$//; ou autrement formulé : supprime le caractère ; s'il existe en fin de chaîne par rien

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    j'ai écris cela , mais ça fonctionne pas !


  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 581
    Points : 2 029
    Points
    2 029
    Par défaut
    alors ça signifie qu'il y a un autre caractère en fin de ligne après ton ;

    retour chariot probablement

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    mais en une ligne comment puis je ecrire que je veux ce tous ce qu'il y a aprés le signe = et le ;

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 581
    Points : 2 029
    Points
    2 029
    Par défaut
    Voici un exemple par l'exemple

    Exemple de fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    From=XX@monsite.com;
    To= YY@destination.com;
    Subject= 123456;
    Msg-File=test1.txt;
    Et un bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    use strict;
     
    my %Hash;
     
    open(FIC, "fichier.txt") or die ("pb lecture fichier.txt : $!\n");
    while(<FIC>)
    {
        chomp();
        $Hash{$1} = $2 if (/^(.+)=(.+);$/);
    }
    En faisant un print de son contenu, ton hash contient désormais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $Hash{From}      = "XX@monsite.com";
    $Hash{To}         = "YY@destination.com";
    $Hash{Subject}  = "123456";
    $Hash{Msg-File} ="test1.txt";
    A toi d'adapter maintenant

  9. #9
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    à ta ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $Hash{$1} = $2 if (/^(.+)=(.+);$/;
    ne manqe t il pas ? une parenthése

    et les accolades !!!

    je reprends ton meme exemple, mais je n'arrive pas à le faire fonctionner

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 581
    Points : 2 029
    Points
    2 029
    Par défaut
    oui, il manque la parenthèse fermante à la fin, désolé (code corrigé)

  11. #11
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    et j'ai aussi une ligne se finissant par ;,

    Et je voudrais supprimer en chaque fin de ligne ,

    soit le ;
    ou ;,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my ($Ficjoint) = $Ligne =~ (/=(.+);$/);

  12. #12
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 624
    Points : 69
    Points
    69
    Par défaut
    dans quel article puis je trouver la syntaxe , comme (/^(.+)=(.+);$/


    merci

  13. #13
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Bonsoir.

    La FAQ Perl devrait te donner toutes les informations nécéssaires sur les regex
    Bon courage !
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

Discussions similaires

  1. [CSV] Ajouter et supprimer des ligne dans un fichier CSV
    Par gpsevasion dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 17h00
  2. Attraper des lignes dans un fichier excel
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/01/2007, 11h27
  3. Ajouter des lignes dans un fichier *.log
    Par Fred2209 dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/12/2006, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo