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

Programmation et administration système Perl Discussion :

Problème expression régulière


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème expression régulière
    Bonjour à tous,

    J'ai un problème avec un script dans le cadre de mon projet d'école. Il y a une étape de mon script qui ne fonctionne pas. Cette étape est le déplacement de tout les fichiers ayant comme nom "032* (suivi de 0 ou plusieurs caractères).ASCCH" du répertoire courant vers un autre répertoire.

    Voici le bout de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my $DirLocalIn = "/tmp/test/1" ;
    my $rep = "/tmp/test" ;
    opendir(FILES, $DirLocalIn) || die("Cannot open directory $DirLocalIn\n");
                            my @filestomove= readdir(FILES);
                            foreach my $old_file (@filestomove) {
                                    if ($old_file =~ /032*.ASCCH|032*.ascch/) {
                                            my $old = "/tmp/test/edi/$old_file";
                                            move $old,$rep || die("Move Failed\n");
                                    }
                            }
    Il semblerait que l'expression régulière utilisé pour la variable $old_file ne soit pas correct...Mais je ne trouve pas la bonne formule.

    Je vous remercie en avance de votre aide

    WolfStark

  2. #2
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Les expressions régulières du langage sont un peu plus complètes et complexes que les "wildcard" caractères des listes de fichier d'un shell.
    Entre autre, si tu veux indiquer "n'importe quel caractère" tu dois explicitement écrire "." (ce caractère est donc "interprété" et pour trouver un caractère point dans une chaine, il faut alors l'échapper "\.").
    L'expression régulière pour valider tes noms de fichier serait donc plutôt :
    /032.*\.ASCCH|032.*\.ascch/

    De même, pour faire une recherche non sensible à la casse, tu peux ajouter l'option /i :

    /032.*\.ascch/i

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Rien à redire aux solutions proposées par Philou, mais j'ajoute pour ta compréhension, wolfstark, que le caractère "*", dans une regex, signifie 0, 1 ou plusieurs exemplaires du caractère qui le précède. Donc, et comme "." signifie un caractère quelconque (à l'exception d'un saut à la ligne dans certains cas particuliers), ".*" signifie 0, 1 ou plusieurs caractères quelconques.

  4. #4
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    comme "." signifie un caractère quelconque (à l'exception d'un saut à la ligne dans certains cas particuliers)
    J'espère être bien réveillé aujourd'hui et ne pas encore te reprendre par erreur, mais j'aurais plutôt dit :
    comme "." signifie un caractère quelconque hormis le saut à la ligne (sauf en cas d'usage de l'option /s où le saut à la ligne est inclus)

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Oui, Philou, tu as raison et c'est plus précis comme tu l'écris, j'avais juste voulu signaler en passant que le saut de ligne est un cas un peu à part par rapport au ".", sans vouloir préciser les détails.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 309
    Points : 12 817
    Points
    12 817
    Par défaut
    Bonjour,

    On pourrait aussi utiliser glob, ce qui donnerait quelque du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $DirLocalIn = "/tmp/test/1" ;
    my $rep = "/tmp/test" ;
    my @filestomove=map { s%.*/%% ;$_ } glob "${DirLocalIn}/032*.ASCCH ${DirLocalIn}/032*.ascch"; 
    foreach my $old_file (@filestomove) {
        my $old = "/tmp/test/edi/$old_file";
        move $old,$rep || die("Move Failed\n");
    }
    Bon, là c'est spécifique au bout de code, donc c'est juste dans le cas ou le parcours du répertoire ne sert qu'à faire le move.

Discussions similaires

  1. Problème expressions régulières
    Par cottcott dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2007, 14h29
  2. Réponses: 3
    Dernier message: 20/04/2007, 14h47
  3. Problème expression régulières
    Par LEK dans le forum C#
    Réponses: 2
    Dernier message: 18/04/2007, 11h40
  4. [RegEx] problème expression régulière
    Par H-bil dans le forum Langage
    Réponses: 4
    Dernier message: 13/02/2007, 15h38
  5. Problème expressions régulières
    Par sozie9372 dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 15h13

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