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 :

problème regex please


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 296
    Par défaut problème regex please
    Bonjour,
    tout d'abord, merci de bien vouloir m'aider à résoudre ce problèm.
    je suis un novice de perl.
    j'essaye de récupérer des données d'un fichier texte.
    la situation est que dans le fichier .txt j'ai plusieurs mots clés qui m'indique le début d'une commande et après j'ai plusieurs messages de sorties, j'essaye de récupérer ces messages.
    merci d'avance , de m'aider à avoir le bon code
    je voudrais bien vous faire part de mon fichier .txt mais il est très long
    help.
    dans un premier temps je fais un petit test pour récuperer les messages d''une commande.
    voila le bout de code que j'ai codé "mon premier"
    dans un premier temps je fais un petit test pour récuperer les messages d''une commande.
    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
     
    #!/usr/bin/perl  -w
    #!/C:/Program Files/LuckaSoft/EngInSite Perl Editor/perle.exe
     
    use warnings;use strict;
    # ouvrir le fichier en lecture est ce que c'est juste comme ça  ou il faut la mettre comme ça : "c/doument and setting/farid.bureau/9cegetel/test_out"
    open F_LIRE,"C:/Documents and Settings/farid/Bureau/9cegetel/test_out.txt"
       or die "E/S : $!\n";
     
    # ouvrire un autre fichier en ecriture (pour les résultats'
    open F_ECRIRE,">> C:/Documents and Settings/farid/Bureau/9cegetel/resultat.txt"
       or die "E/S : $!\n";
     
    #  détecter la commande SRFIL
    m/SRFIL/; # j'éi besoin de faire la même chose pour plusieurs chaines = SRFIL; ESMIN; GLRIL; ALAIL; ANOIL; NSSIN; DMPIL; 
     
    #k ecrire dans le fichier résultat le paragrape de la commande
    # debut de ligne:     TRAITEMENT TDRHM0 ACC /fin de pargraphe :     TRAITEMENT TDRHM0 EXC
    while(<F_LIRE>){
      print F_ECRIRE if /^    TRAITEMENT TDRHM0 ACC/.../^\    TRAITEMENT TDRHM0 EXCs*$/;
     
    }   
     
    close F_LIRE;
    close F_ECRIRE;

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Et quel est le problème ? Ton code a l'air aussi correct que je puis le dire sans avoir un échantillon du texte auquel il s'applique. Sauf le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #  détecter la commande SRFIL
    m/SRFIL/; # j'éi besoin de faire la même chose pour plusieurs chaines = SRFIL; ESMIN; GLRIL; ALAIL; ANOIL; NSSIN; DMPIL;
    Qui traîne en plein dans le désert (tu ne vérifie pas du tout sa valeur de retour), sans parler du fait que tu n'a même pas commencé à lire le fichier à ce niveau là...

    --
    Jedaï

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 296
    Par défaut
    bonjour,
    d'abord merci beaucoup de votre réponse assez rapide
    ce qus je sache m/chaine/ : c'est pour chercher un mot clés dans le texte appartir du quel je commence le traitement.
    parceque en fait, pour chaque commande il ya d'abord son nom au début de la ligne puis après les messages correspondant.
    exemple: les mots que j'ai souligné sont les mots clés que je voudrais détecter

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    ESMIN:ETAT=HS;
    
       CMD ESMIN  00002   07-03-07 06-33-46
       INP ESMIN  00002   07-03-07 06-33-46
    
    
    
       RES ESMIN  00002   07-03-07 06-33-46
        CEN=1/07-03-07/06 H 33 MN 46/INTERROGATION D'ETAT DE SM
        TRAITEMENT TDRHM0 ACC
    
         AM=SMB15       ETAT=INDL AUTS=NON AGEO=S1-TR02-B10-A137-R002
           AF=PUPE7     ETAT=INDL
        TRAITEMENT TDRHM0 EXC
    
    COMMANDE EXECUTEE
    
       RPT ESMIN  00002   07-03-07 06-33-46
           EXC
    
    
    ===============================================================================
       SRFIL,DBG=H'F':EVT=0+13+5,DD=07-2-07;
    
       CMD SRFIL  00003   07-03-07 06-33-58
       INP SRFIL  00003   07-03-07 06-33-58
    
    
    
       RES SRFIL  00003   07-03-07 06-33-58
        CEN=1/07-03-07/06 H 33 MN 58/LISTAGE SURETE DE FONCTIONNEMENT
        TRAITEMENT TDRHM0 ACC
        07-02-10/20 H 45 MN 34 EVT=00 :MISE HS (FAUTE)
          /AM = SMB11 ETAT=ES   AF=PUPE4
          / 0200 0702 1020 4534 048A 0155 0000 0000 0000 0000 0000 0000
          / 11AF 6100 0600 0000 0000 0155 4100 0602 0300 4200 0004 FFE5
          / 090D 51
        07-02-10/20 H 51 MN 34 EVT=00 :MISE HS (FAUTE)
          /AM = SMB12 ETAT=ES   AF=PUPE5
          / 0200 0702 1020 5134 048B 0156 0000 0000 0000 0000 0000 0000
          / 11AF 6100 0600 0000 0000 0156 4100 0702 0300 4200 0004 FFE5
          / 090D 31
        07-02-13/11 H 28 MN 42 EVT=00 :MISE HS (FAUTE)
          /AM = SMB14 ETAT=ES   AF=PUPE6
          / 0200 0702 1311 2842 048D 0157 0000 0000 0000 0000 0000 0000
          / 11AF 6100 0600 0000 0000 0157 4100 0802 0300 4200 0004 FFE5
          / 090D 31
        07-02-20/01 H 16 MN 09 EVT=24 :DIFF.ETAT SYS ES
          / 0218 0702 2001 1609 0000 0000 0000 0000 0000 0000 0000 0000
          / 10AF 10
        07-02-27/12 H 12 MN 10 EVT=24 :DIFF.ETAT SYS ES
          / 0218 0702 2712 1210 0000 0000 0000 0000 0000 0000 0000 0000
          / 10AF 8000 0010 00FF FF
        TRAITEMENT TDRHM0 EXC
    
    COMMANDE EXECUTEE
    
       RPT SRFIL  00004   07-03-07 06-45-22
           EXC

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par mariafan
    bonjour,
    d'abord merci beaucoup de votre réponse assez rapide
    ce qus je sache m/chaine/ : c'est pour chercher un mot clés dans le texte appartir du quel je commence le traitement.
    parceque en fait, pour chaque commande il ya d'abord son nom au début de la ligne puis après les messages correspondant.
    exemple: les mots que j'ai souligné sont les mots clés que je voudrais détecter
    Ok, mais il faut tout de même mettre la regex dans la boucle de lecture, et FAIRE QUELQUE CHOSE AVEC !!
    Je ne suis pas sûr de comprendre ce que tu veux, veux tu récupérer les lignes entre deux commandes ? Et dans ce cas à quoi sert ton autre regex dans la boucle de lecture ?

    --
    Jedaï

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 296
    Par défaut
    je ne sais pas est ce que ce que j'ai fais est bien ou pas:
    l'idée est de :
    ouvrir le fichiers source en lecture, ouvrir un fichier résultat en écriture, puis en lisant le fichier source récupérer les message de chaque commande et les écrire dans le fichier source

    pourriez-vous me dire ce que vous en pensez.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 296
    Par défaut
    EN FAIT
    en faite ce que je dois faire exactement est de récuperer les information de chaque message parmis tous les message de chaque commande et envoyer ces informations dans une base de données MySQL,
    mais puisque je suis débutant j'essaye de faire ce petit test pour savoir si j'ai bien compris le petit cours que j'ai lu ou pas.

  7. #7
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par mariafan
    je ne sais pas est ce que ce que j'ai fais est bien ou pas:
    l'idée est de :
    ouvrir le fichiers source en lecture, ouvrir un fichier résultat en écriture, puis en lisant le fichier source récupérer les message de chaque commande et les écrire dans le fichier source

    pourriez-vous me dire ce que vous en pensez.
    Tout cela est très bien, mais comme tu ne me dis pas ce que tu veux avoir en sortie, cela ne m'aide pas beaucoup... Visiblement tu ne veux pas avoir toutes les lignes entre deux commandes, mais veux-tu tout de même avoir le nom de la commande ? Présenté comment ?
    D'habitude quand quelqu'un, comme toi, n'arrive pas à exprimer clairement son besoin, je lui demande de me donner un échantillon d'entrée, et l'échantillon de sortie correspondant, pourrais-tu faire cela ?

    --
    Jedaï

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème regex suppression balises HTML
    Par crazydindon dans le forum Langage
    Réponses: 6
    Dernier message: 11/09/2007, 14h39
  2. [RegEx] Problème regex et caractère \
    Par Kyom dans le forum Langage
    Réponses: 2
    Dernier message: 05/04/2007, 16h07
  3. Problème regex VSFTPD
    Par goldkey dans le forum Réseau
    Réponses: 1
    Dernier message: 19/01/2007, 17h55
  4. [RegEx] Problème regex url cliquable
    Par dorian53 dans le forum Langage
    Réponses: 5
    Dernier message: 16/11/2006, 19h17
  5. [RegEx] Problème Regex PCRE
    Par raptorman dans le forum Langage
    Réponses: 6
    Dernier message: 07/07/2006, 17h23

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