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 :

[Expression régulière] capture de chaine


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Par défaut [Expression régulière] capture de chaine
    Bonjour,
    J'essai moi aussi de me faire aux expressions régulières.
    En lisant le sujet, j'ai essayé de faire la mienne mais sans succès

    Voila mon problème, dans mon fichier j'ai une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    APPLICATION="PA_CADCASA_ACA"
    Et je voudrai ce qui est entre guillemets.
    J'ai donc essayé:
    my $test10 = /"(\w*)"/;
    Mais ça ne prend pas.

    Auriez vous une idée ou un tuto expliquant bien ça?
    J'ai en effet lu le PDF de Sylvain Lhullier et je n'y ai pas exactement trouvé la procédure pour extraire une sous chaine de ce type.

    Merci,
    Cordialement,
    Benjamin

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Regarde ta regex APPLICATIION

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $chaine = 'APPLICATION="PA_CADCASA_ACA"';
    my ($capture) = $chaine =~ /APPLICATION=\"(\w+)\"/;
    print $capture;

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Par défaut
    Haa, bon, sans surprise, ça marche

    Par contre, auriez vous un tuto qui reprenne bien l'explication de l'utilisation de ces méthodes?
    (J'aime bien comprendre ce que j'écris :p )

    Merci,
    Cordialement,
    Benjamin

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Le tutoriel de Sylvain est déjà pas mal. Tu peux y rajouter la FAQ perl.

    Pensez à mettre le post en résolu !!

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Par défaut
    Voici donc le code final pour ceux qui seraient intéressés:
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    #!/usr/bin/perl
    #Ce code en PERL permet de recuperer des infos specifiques de fichiers xml.
    #De nouveaux fichiers .csv sont créés.
    #il est créer un fichier csv par application trouvées dans l'ensemble des xml.
    #
    #Pour utiliser ce code, ouvrez l invite de commande, placez vous dans le repertoire
    #que vous voulez analyser et ecrivez la commande:
    #"pearl EMPLACEMENT_DU_FICHIER_RECUP_INFO_FICHIER"
    #exemple: "perl D:\Data\recup_info_fichier.pl"
     
    use strict;
    my %RecupData = ();
    my @ListeFic  = <*.xml>;
    my @TabRecupCleHash;
     
    foreach (@ListeFic) {
    	my $valAppli        = "";
    	my $lignEnCour      = "";
    	my $valTableEnCour  = "";
    	my $valUserDaily    = "";
    	my $valAuthor       = "";
    	my $valchangeUserID = "";
    	my $valCmdline      = "";
    	my $valNodeID       = "";
    	my $valOwner        = "";
     
    	my $nomFichier = $_;
    	print "\n\nfichier $_ est un xml\n";
     
    	open( FICHIER, "$_" ) or die("open: $!");
     
    	while ( defined( $_ = <FICHIER> ) ) {
    		$lignEnCour = $_;
     
    		if ( $lignEnCour =~ m/APPLICATION/ ) {
    			($valAppli) = $lignEnCour =~ /APPLICATION=\"(.*)\"/;
    			print("Application = \t$valAppli\n");
    			( $RecupData{$valAppli} ) .= ", " . $valAppli;
    		}
    		if ( $lignEnCour =~ m/TABLE_NAME/ ) {
    			($valTableEnCour) = $lignEnCour =~ /TABLE_NAME=\"(.*)\"/;
    			print("Table en cours = \t$valTableEnCour\n");
    			( $RecupData{$valAppli} ) .= ", " . $valTableEnCour;
    		}
    		if ( $lignEnCour =~ m/TABLE_USERDAILY/ ) {
    			($valUserDaily) = $lignEnCour =~ /TABLE_USERDAILY=\"(.*)\"/;
    			print("User daily = \t$valUserDaily\n");
    			( $RecupData{$valAppli} ) .= ", " . $valUserDaily;
    		}
    		if ( $lignEnCour =~ m/AUTHOR/ ) {
    			($valAuthor) = $lignEnCour =~ /AUTHOR=\"(.*)\"/;
    			print("Auteur = \t$valAuthor\n");
    			( $RecupData{$valAppli} ) .= ", " . $valAuthor;
    		}
    		if ( $lignEnCour =~ m/CHANGE_USERID/ ) {
    			($valchangeUserID) = $lignEnCour =~ /CHANGE_USERID=\"(.*)\"/;
    			print("Change user ID = \t$valchangeUserID\n");
    			( $RecupData{$valAppli} ) .= ", " . $valchangeUserID;
    		}
    		if ( $lignEnCour =~ m/CMDLINE/ ) {
    			($valCmdline) = $lignEnCour =~ /CMDLINE=\"(.*)"/;
    			print("CMD line = \t$valCmdline\n");
    			( $RecupData{$valAppli} ) .= ", " . $valCmdline;
    		}
    		if ( $lignEnCour =~ m/NODEID/ ) {
    			($valNodeID) = $lignEnCour =~ /NODEID=\"(.*)\"/;
    			print("Node ID = \t$valNodeID\n");
    			( $RecupData{$valAppli} ) .= ", " . $valNodeID;
    		}
    		if ( $lignEnCour =~ m/OWNER/ ) {
    			($valOwner) = $lignEnCour =~ /OWNER=\"(.*)\"/;
    			print("Owner = \t$valOwner\n");
    			( $RecupData{$valAppli} ) .= ", " . $valOwner;
    		}
     
    	}
     
    	close(FICHIER);
    }
     
    @TabRecupCleHash = keys(%RecupData);
    print "\ntableau = @TabRecupCleHash";
     
    for my $key (@TabRecupCleHash) {
    	open( ECRIRE, ">$key.csv" )
    	  || die("Erreur de lors de la creation du fichier");
     
    	printf( ECRIRE "$RecupData{$key}" );
    	close(ECRIRE);
     
    }
    Je n'ai plus qu'une difficulté, réussir a faire en sorte de mettre chaque info dans une cellule différente de mes .csv créés.
    Si j'y arrive, je vous tiens au jus.

    Merci a vous pour votre aide,
    Cordialement,
    Benjamin

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Par défaut
    Trouvé pour l'affichage dans .csv, il suffit de mettre " ; " a la place de ", " dans touts mes if aux lignes qui ressemblent a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ( $RecupData{$valAppli} ) .= ", " . $valTableEnCour;

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/08/2011, 12h57
  2. Expressions régulières - Longueur de chaines.
    Par caddy dans le forum Général Java
    Réponses: 3
    Dernier message: 28/12/2009, 15h31
  3. [Expression régulière] Début de chaine
    Par navis84 dans le forum Oracle
    Réponses: 8
    Dernier message: 10/10/2006, 13h52
  4. Réponses: 11
    Dernier message: 24/03/2006, 11h12
  5. Réponses: 7
    Dernier message: 27/10/2005, 19h23

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