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 :

Verifier que le fichier fini par un motif précis


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Par défaut Verifier que le fichier fini par un motif précis
    Bonjour,

    Je dois vérifier si mon fichier fini par :

    Mais il peut y avoir autant de saut de ligne entre "COMMIT" et le "/" et même des commentaires comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    COMMIT;
     
    --------------------------------------------------
    -- 8847 - end SJ 22 nov 2010:
    --------------------------------------------------
     
     
    /
    Sachant qu'un commentaire commence par " -- "

    Comment faire svp ?

  2. #2
    Membre expérimenté

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 184
    Par défaut
    Avec une mini machine à état, dont voici un bout :
    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
     
    use strict;
    use warnings;
     
    my $l ="";
     
    while( defined( $l = <DATA> ) && $l!~/^COMMIT;$/ ) {
     
    }
    die "Erreur : ne finit pas par COMMIT; / \n" if !defined( $l ) || $l!~/^COMMIT;$/;
     
    while (defined( $l = <DATA> ) && $l=~/^--/ && $l!~/^\/$/ ) {}
     
    die "Erreur : ne finit pas par COMMIT; / \n" if !defined( $l ) || $l!~/^\/$/;
     
    die "Erreur : ne finit pas par COMMIT; / \n" if defined( $l = <DATA> );
     
    print "File OK\n";

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    A la ligne 10, le deuxième élément du test ($l!~/^COMMIT;$/) ne peut jamais arriver, puisqu'en sortie de boucle, soit $l n'est pas défini, soit COMMIT; est trouvé.
    A la ligne 12, il n'est pas tenu compte des lignes vides.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Par défaut
    salut,

    Je verrais plutôt un truc comme cela:

    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
     
    my $l;
    my $find_commit = 0;
    my $find_slash = 0;
     
    while( defined( $l = <DATA> )) {
    	if ( $l =~ m/^COMMIT;$/ )
    	{
    		$find_commit = 1;
    	}
    	if ( $l =~ m/^\/$/ && $find_commit == 1 )
    	{
    		$find_slash = 1;
    	}
    }
     
    if ( $find_slash == 1 && $find_commit == 1 )
    {
    	print "Le fichier se termine par \"COMMIT;\" et \"/\" \n"; 
    }
    else
    {
    	print "Le fichier ne se termine par par \"COMMIT;\" et \"/\" \n"; 
    }
    on parcourt le fichier, on cherche "COMMIT;" une fois ce pattern trouvé on continue de parcourir le fichier à la recherche de "\".

  5. #5
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 236
    Par défaut
    Merci pour vos réponses c'est impeccable sauf sur un point !

    J'ai dans mon code plusieurs fois le mot COMMIT !
    Comment faire ?

    Car ce dernier programme ne fonctionne plus du coup..

    Y aurait t'il moyen de partir de la fin du fichier, et la si on trouver le Slash puis un COMMIT hors lignes vide et lignes de commentaires... je suis dans le flou

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Citation Envoyé par mamax29 Voir le message
    on parcourt le fichier, on cherche "COMMIT;" une fois ce pattern trouvé on continue de parcourir le fichier à la recherche de "\".
    Ton algorithme ne garanti pas que COMMIT; et / sont les deux dernières informations du fichier, il peut y avoir d'autres informations (autres que des commentaires). De ce point de vue, l'algorithme de dimitry est plus conforme à la spécification.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 221
    Par défaut
    Ben, au départ cela n'a pas été spécifié


    avec ceci:

    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
     
    while( $l = <DATA> )
    {
    	print "$l";
    	if ( $l =~ m/^COMMIT;$/ )
    	{
    		$find_commit = 1;
    	}
    	elsif ( $l =~ m/^$/ && $find_commit == 1 || $l =~ m/^--/  && $find_commit == 1  )
    	{
    		$find_commit = 1;
    	}
    	else
    	{
    		$find_commit = 0;
    	}
    }

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/09/2013, 14h39
  2. Vérifier que chaque ligne de mon fichier fini par ";"
    Par oliviernouhi dans le forum Langage
    Réponses: 2
    Dernier message: 18/04/2011, 16h54
  3. [MySQL] envoyer fichier chargé par formulaire an tant que pièce joint dans l'Email de destination
    Par all4youweb dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/07/2010, 10h35
  4. Réponses: 3
    Dernier message: 01/05/2010, 00h11
  5. Croyez vous que .NET fini par être OpenSource ?
    Par mamiberkof dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 19/01/2008, 10h11

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