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 :

Regex substitution probleme


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut Regex substitution probleme
    Bonjour,

    Mon problème est que je compare une chaine de caractère à une régex. Si elle correspond, alors je supprime cette une partie ou la chaine entière.

    Pour effectuer cela je fait ça : (C'est un chtit extrait jai 700 ligne sinon ^^)

    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
     
    if ($Expression =~ m/(Revue Spécifications neutronique)/i){	$Expression =~ s/(Revue Spécifications neutronique)/*/ig;
    }elsif ($Expression =~ m/(Revue FSS system general design   )/i){	$Expression =~ s/(Revue FSS system general design   )/*/ig;
    }elsif ($Expression =~ m/(Revue FSS interfaces general design)/i){	$Expression =~ s/(Revue FSS interfaces general design)/*/ig;
    }elsif ($Expression =~ m/(Revue Modelling general design )/i){	$Expression =~ s/(Revue Modelling general design )/*/ig;
    }elsif ($Expression =~ m/(Revue Hardware architecture)/i){	$Expression =~ s/(Revue Hardware architecture)/*/ig;
    }elsif ($Expression =~ m/(Revue de démarrage)/i){	$Expression =~ s/(Revue de démarrage)/*/ig;
    }elsif ($Expression =~ m/( Plan Qualité )/i){	$Expression =~ s/( Plan Qualité )/*/ig;
    }elsif ($Expression =~ m/( Traçabilité Cahier de recette-Contrat )/i){	$Expression =~ s/( Traçabilité Cahier de recette-Contrat )/*/ig;
    }elsif ($Expression =~ m/( Cahier de Recette (usine) )/i){	$Expression =~ s/( Cahier de Recette (usine) )/*/ig;
    }elsif ($Expression =~ m/( Etendue jalons suivi Qualité )/i){	$Expression =~ s/( Etendue jalons suivi Qualité )/*/ig;
    }elsif ($Expression =~ m/( Bilan de projet Technique )/i){	$Expression =~ s/( Bilan de projet Technique )/*/ig;
    }elsif ($Expression =~ m/( Revue de recette interne Duplication Simu 2 )/i){	$Expression =~ s/( Revue de recette interne )/*/ig;
    }elsif ($Expression =~ m/( Revue de passage en support )/i){	$Expression =~ s/( Revue de passage en support )/*/ig;
    }elsif ($Expression =~ m/(Revue spécifications achats)/i){	$Expression =~ s/(Revue spécifications achats)/*/ig;
    }elsif ($Expression =~ m/(- Revue Spécs 3D)/i){	$Expression =~ s/(- Revue Spécs )/*/ig;
    }elsif ($Expression =~ m/(Pré recette site simu1)/i){	$Expression =~ s/(Pré recette site simu1)/*/ig;
    }elsif ($Expression =~ m/(Recette simu 2 première duplication remorque)/i){	$Expression =~ s/(Recette simu  )/*/ig;
    }elsif ($Expression =~ m/(Recette simu 2 seconde duplication remorque)/i){	$Expression =~ s/(Recette simu  )/*/ig;
    }elsif ($Expression =~ m/(Réunion lancement formation)/i){	$Expression =~ s/(Réunion lancement formation)/*/ig;
    }elsif ($Expression =~ m/(Utilisateurs)/i){	$Expression =~ s/(Utilisateurs)/*/ig;
    }elsif ($Expression =~ m/(Maintenance)/i){	$Expression =~ s/(Maintenance)/*/ig;
    }elsif ($Expression =~ m/(Spécifications Formation)/i){	$Expression =~ s/(Spécifications Formation)/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation)/i){	$Expression =~ s/(Bilan interne formation)/*/ig;
    }elsif ($Expression =~ m/( Revue de démarrage )/i){	$Expression =~ s/( Revue de démarrage )/*/ig;
    }elsif ($Expression =~ m/( Réunion de lancement Formation )/i){	$Expression =~ s/( Réunion de lancement Formation )/*/ig;
    }elsif ($Expression =~ m/( Revue de spécification )/i){	$Expression =~ s/( Revue de spécification )/*/ig;
    }elsif ($Expression =~ m/(Revue de livraison module)/i){	$Expression =~ s/(Revue de livraison module)/*/ig;
    }elsif ($Expression =~ m/(PV de reception module)/i){	$Expression =~ s/(PV de reception module)/*/ig;
    }elsif ($Expression =~ m/(Revue de recette inerne)/i){	$Expression =~ s/(Revue de recette inerne)/*/ig;
    }elsif ($Expression =~ m/(Revue de livraison )/i){	$Expression =~ s/(Revue de livraison )/*/ig;
    }elsif ($Expression =~ m/(PV de réception provisoire )/i){	$Expression =~ s/(PV de réception provisoire )/*/ig;
    }elsif ($Expression =~ m/(Livraison document "Guide pédagogique" )/i){	$Expression =~ s/(Livraison document "Guide pédagogique" )/*/ig;
    }elsif ($Expression =~ m/(Livraison document "Guide pédagogique")/i){	$Expression =~ s/(Livraison document "Guide pédagogique")/*/ig;
    }elsif ($Expression =~ m/(PV de réception provisoire  )/i){	$Expression =~ s/(PV de réception provisoire  )/*/ig;
    }elsif ($Expression =~ m/(Revue de recette inerne )/i){	$Expression =~ s/(Revue de recette inerne )/*/ig;
    }elsif ($Expression =~ m/(Revue de livraison : Module Pression PZR PP4)/i){	$Expression =~ s/(Revue de livraison : )/*/ig;
    }elsif ($Expression =~ m/(PV de réception provisoire : Module Pression PZR PP4)/i){	$Expression =~ s/(PV de réception provisoire : )/*/ig;
    }elsif ($Expression =~ m/(Livraison document "Guide pédagogoque" : Module Pression PZR PP4)/i){	$Expression =~ s/(Livraison document "Guide pédagogoque" : )/*/ig;
    }elsif ($Expression =~ m/(Livraison document "Guide pédagogique" : Poste d eau CP2)/i){	$Expression =~ s/(Livraison document "Guide pédagogique" : )/*/ig;
    }elsif ($Expression =~ m/(Revue de recette interne )/i){	$Expression =~ s/(Revue de recette interne )/*/ig;
    }elsif ($Expression =~ m/( Plan Qualité Projet )/i){	$Expression =~ s/( Plan Qualité Projet )/*/ig;
    }elsif ($Expression =~ m/( Revue d achat )/i){	$Expression =~ s/( Revue d achat )/*/ig;
    }elsif ($Expression =~ m/(Spécification Formation)/i){	$Expression =~ s/(Spécification Formation)/*/ig;
    }elsif ($Expression =~ m/(Bilan interne Formation FCSF1 S10-11)/i){	$Expression =~ s/(Bilan interne Formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne Formation FTB Chinon S11-12)/i){	$Expression =~ s/(Bilan interne Formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne Formation FCSF1 S23-24)/i){	$Expression =~ s/(Bilan interne Formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne Formation FTB Blayais S24-25)/i){	$Expression =~ s/(Bilan interne Formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne Formation FTB FESSENHEIM S38-39)/i){	$Expression =~ s/(Bilan interne Formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne Formation FCSF1 Chinon S41-42)/i){	$Expression =~ s/(Bilan interne Formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne Formation FCSF1 CATTENOM S48-49)/i){	$Expression =~ s/(Bilan interne Formation )/*/ig;
    }elsif ($Expression =~ m/(ilan interne Formation FTB Bugey S42-43)/i){	$Expression =~ s/(ilan interne Formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation REP SAT S1)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation REP SAT S2)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation REP SAT S49)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation REP S25)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation REP S43)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Réunion de lancement formation)/i){	$Expression =~ s/(Réunion de lancement formation)/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S5)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S6)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S7)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S8)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S9)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S10)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S11)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S12)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S2)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S37)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S16)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S23)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation TIHANGE 2012)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S20)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation S13)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne Formation S3)/i){	$Expression =~ s/(Bilan interne Formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne Formation S(2ème semestre))/i){	$Expression =~ s/(Bilan interne Formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation n°1)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation n°2)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation n°3)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation n°4)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation n°5)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation n°6)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    }elsif ($Expression =~ m/(Bilan interne formation n°7)/i){	$Expression =~ s/(Bilan interne formation )/*/ig;
    Maintenant mon problème est que ces regex fonctionnent comme elle ont envie.
    Soit ça marche, soit ça me remplace un ou plusieurs espace par mes * soit ça fait rien. (Ce qui n'est pas normal)


    Pouvez vous m’éclairer s'il vous plais sur comment supprimer une partie d'une chaîne ?

  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
    D'abord, tu n'es pas obligé de tester une regexp avant de faire une substitution : tu tentes de substituer, si le motif existe, il sera remplacé, sinon, rien n'est modifié. L'opérateur de substitution te retourne le nombre de substitution effectuées.

    Pour ta chaine de remplacement, tu as mis "*", ce qui veut dire qu'à la place du texte que tu recherches, l'opérateur de substitution mettre le caractère étoile ("*").
    Si tu effacer la chaine recherchée, il faut mettre une chaine vide, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Expression =~ s/(Revue Spécifications neutronique)//ig;
    Tu peux aussi faire plusieurs substitution à la fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Expression =~ s/(Revue Spécifications neutronique|Revue FSS system general design   )//ig;
    Attention aussi aux espaces dans ton motifs (parfois tu en as mis plusieurs, parfois un seul, parfois à la fin ...) si tu ne sais pas trop combien et quel type d'espaces séparent les mots, utilise \s+ à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Expression =~ s/(Revue\s+Spécifications\s+neutronique|Revue\s+FSS\s+system\s+general\s+design\s*)//ig;
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Merci de ta réponse !!

    Alors j'ai enlevé tous les tests, et j'ai modifier mes regex.

    Je vais pas les mettre toutes à la suites car certaine je vais récupérer une valeur autre que rien.

    Mais pour vérifier que ça marche je met ** normalement je devrais obtenir que des ** si je décide de tout remplacé on est d'accord ?

    mais ça marche pas ...

    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
     
    $Expression =~ s/(\s+Revue\s+de\s+Contrat\s+)/**/ig;
    $Expression =~ s/(\s+Revue\s+de\s+Démarrage\s+projet\s+)/**/ig;
    $Expression =~ s/(\s+Plan\s+Assurance\s+Qualité\s+)/**/ig;
    $Expression =~ s/(\s+Cahier\s+de\s+Recette\s+)/**/ig;
    $Expression =~ s/(\s+Traçabilité\s+DSS-Cahier\s+de\s+Recette\s+)/**/ig;
    $Expression =~ s/(\s+Plan\s+de\s+Gestion\s+de\s+Configuration\s+)/**/ig;
    $Expression =~ s/(\s+Documentation\s+utilisateur\s+)/**/ig;
    $Expression =~ s/(\s+Recette\s+Interne\s+)/**/ig;
    $Expression =~ s/(\s+Revue\s+passage\s+en\s+maintenance\s+)/**/ig;
    $Expression =~ s/(\s+Tests\s+et\s+contrôles\s+avant\s+livra\s+)/**/ig;
    $Expression =~ s/(\s+Revue\s+de\s+Livraison\s+)/**/ig;
    $Expression =~ s/(\s+Bordereaux\s+de\s+livraison\s+signés\s+par\s+le\s+client\s+)/**/ig;
    $Expression =~ s/(\s+PV\s+de\s+Réception\s+Provisoire\s+)/**/ig;
    $Expression =~ s/(\s+PV\s+de\s+Réception\s+Définitive\s+)/**/ig;
    $Expression =~ s/(\s+Evaluation\s+sur\s+le\s+déroulement\s+de\s+projet\s+)/**/ig;
    $Expression =~ s/(\s+Mise\s+à\s+jour\s+des\s+Fiches\s+Evaluation\s+Fournisseurs\s+)/**/ig;
    $Expression =~ s/(\s+Bilan\s+de\s+projet\s+)/**/ig;
    $Expression =~ s/(\s+Bilan\s+Qualité\s+Projet\s+)/**/ig;
    $Expression =~ s/(\s+Archivage\s+Informatique\s+)/**/ig;
    $Expression =~ s/(\s+Archivage\s+Documentaire\s+)/**/ig;
    $Expression =~ s/(\s+Réunion\s+lancement\s+formation\s+)/**/ig;
    $Expression =~ s/(\s+Fiches\s+de\s+mission\s+)/**/ig;
    $Expression =~ s/(\s+Lettre\s+de\s+satisfaction\s+Client\s+)/**/ig;
    $Expression =~ s/(\s+Project\s+Implementation\s+Plan\s+)/**/ig;
    $Expression =~ s/(\s+Project\s+Management\s+Plan\s+)/**/ig;
    $Expression =~ s/(\s+Bilan\s+interne\s+Formation\s+)/**/ig;
    $Expression =~ s/(Revue\s+spécification\s+achats)/**/ig;
    et j'obtien pour ces lignes :
    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
     
     Revue**de**Contrat 
     ****projet 
     Plan**Assurance**Qualité 
     Cahier**de**Recette 
     Traçabilité**DSS-Cahier**de**Recette 
     Plan**de**Gestion**de**Configuration 
     Documentation**utilisateur 
     Recette**Interne 
     Revue**passage**en**** 
     Tests**et**contrôles**avant**livra 
     ** 
     Bordereaux**de**livraison**signés**par**le**client 
     ** 
     PV**de**Réception**Définitive 
     Evaluation**sur**le**déroulement**de**projet 
     Mise**à**jour**des**Fiches**Evaluation**Fournisseurs 
     ** 
     Bilan**Qualité**Projet 
     ****Informatique 
     ****Documentaire 
     ** 
     Fiches**de**mission 
     Lettre**de**satisfaction**Client 
     Project**Implementation**Plan 
     Project**Management**Plan 
     ** 
    Revue spécification achats

    Je comprend pas du tout comme sa marche, y a aucune logique dans ce qui ressort pourtant l'expression à l'aire simple

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    1 - Il est très important que tu n'ais pas mis, si tu as un même motif dans plusieurs regex, la regex la moins discriminante en premier

    ex OK:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $Expression =~ s/(Revue\s+spécification\s+achats)/**/ig;
    $Expression =~ s/(Revue)/**/ig;
    ex KO:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $Expression =~ s/Revue/**/ig;
    $Expression =~ s/Revue\s+spécification\s+achats/**/ig;
    car dans le second cas, il remplacerait Revue par ** et ne trouverait plus le motif "Revue\s+spécification\s+achats"

    2 - Avec les exemples donnés, on dirait que tu fais une substitution de \s+ par **. J'aurais plutôt utilisé un autre caractère que le "*", genre "#"

    3- je commencerais tes regex par \s* au lieu de \s+, ça évitera de ne pas prendre le motif si il manque l'espace en début

    4 - J'espère que tu n'as pas trop d'entrée car si à chaque enregistrement il y a 700 if/elsif à utiliser, la perf risque d'être pas terrible. Dans ce cas, essaie de mettre les regex qui seront le plus souvent traitées en premier

  5. #5
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    En fait j'ai une liste de désignation (2000 et plus) j'extrais les doublons grâce à Excel et il m'en reste 778.

    Après il faut que je match ses désignations et les supprimes. il y en a certaine, a qui à terme, remplacerais la chaine.

    Et d'après ce que j'ai donnée c'est pas ce que je voulais Moi je veux rien a la base mais si je met rien, je ne vois pas les erreurs que je mette un # ou une * j'aurais toujours le même soucis mais je vais testé on sait jamais si l’étoile est interprétée.

    merci de m'aidez ^^ vous êtes des amours, car depuis le temps que j'y suis je désespère d'y arriver ...

  6. #6
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Comment faire pour imposer le motif?

    si c'est différent de 1 micron alors on fait rien.

    Merci @6ril23, j'ai mis \s* au début et puis en fait partout et du coup ça marche mieux mais y en a encore qui fond de la résistance

    Je touche au but !

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    En fait j'ai une liste de désignation (2000 et plus) j'extrais les doublons grâce à Excel et il m'en reste 778.
    heu je pense que la méthode est vraiment source à problème. Pourquoi passer par Excel et sa cohorte de problème possible alors que tu peux extraire la liste sans doublon (select DINCTINCT designation from MaTable [Where....])

    Sinon désolé de revenir à la solution proposé dans l'autre Sujet, mais je pense qu'une solution enièrement en BDD serait plus appropriée car moins contraignante:

    tu récupères ta liste sans doublon que tu mets dans un nouvelle table (table de correspondance) et comme 2ème champs tu lui attribues le code souhaité.

    j'aurais toujours le même soucis mais je vais testé on sait jamais si l’étoile est interprétée
    oui il vaut mieux éviter les caractères qui pourraient être interprétés


    Edit: Je vais développer mon idée tout en BDD:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    desc Tab_init        => Chp1, designation, Chp2, Chp3...
    desc Tab_corresp => designation, New_designation
    ça devrait te sortir le bon résultat si tu fais alors une requête du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT i.Chp1, c.New_designation, i.Chp2, i.Chp3....
    FROM Tab_init i, Tab_corresp c
    WHERE i.designation = c.designation
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT i.Chp1, c.New_designation, i.Chp2, i.Chp3....
    FROM Tab_init i
    INNER JOIN Tab_corresp c
    ON i.designation = c.designation
    Ainsi : - soit tu traites la sortie dans un fichier pour mise au format pour l'importer dans ta nouvelle base
    - soit tu crées un table temporaire que tu exportes pour la réimporter dans ta nouvelle base

  8. #8
    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
    Pourrais-tu donner des exemples de désignation avant leur transformation ? (et le résultat après transformation)
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    @Philou: Ce Sujet est la suite de celui-ci et les exemple que tu demandes sont

    En fait il faut remplacer les différents libellés par des nombres: c'est juste un changement de nomenclature
    Il y a abandon des anciens libellés pour de nouveaux ("Jalons chiffrés")

    Si j'ai bien compris, il y a environ 700 anciens libellés et seulement une 50aines de nouveaux

  10. #10
    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
    Ooops... je n'avais pas fait le rapprochement...
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  11. #11
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    @6ril23 : non je ne passerais pas par une base car cela met impossible je traite les données comme elles arrivent car elles sont l’enchainement de plusieurs requêtes qui réponde à plusieurs critères ect...

    Si j'ai ouvert un autre sujet c'est que je fait plus la même chose donc ne regardons pas les autres sujets sinon on va se perdre.

    Je veux soit supprimer entièrement la désignation soit garder des bout que j'aurai choisi.
    Exemple :

    Revue Livraison. C'est ce que j'appelle un Type jalon car dans ma nouvelle base il est déjà présent. Je ne vais pas y garder. Par contre, si j'ai :
    Revue Livraison '"Guide pédagogique". Je vais garder "Guide pédagogique".

    Mais ce que je garde c'est moi qui le définit maintenant je veux trouver une régex qui supprime ce que je veux.

    Je vais géré les importance aujourd'hui et mettre les cas spéciaux en haut de ma liste et les communs en bas.

    Autres exemples :

    Bilan interne Formation FTB FESSENHEIM S38-39 -> FTB FESSENHEIM S38-39
    PV de mise en service SEPTEN -> SEPTEN

    ....

  12. #12
    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
    Pour les deux exemples ci-dessous, il est possible de :
    - construire une expression régulière à partie d'une liste d'identifiant à supprimer
    - d'appliquer cette regexp à toutes les lignes

    Une façon de faire avec les données de l'exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my @id = ("Bilan interne Formation FTB FESSENHEIM S38-39", "PV de mise en service SEPTEN");
    my @to_remove = ("Bilan interne Formation", "PV de mise en service");
    my $remove_re = "\\s*(" . (join "|", map { s/ +/\\s+/g ; $_ } @to_remove) . ")\\s*";
    s/$remove_re//g foreach @id;
    say "Id = ", join ",", map "[$_]", @id;
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Id = [FTB FESSENHEIM S38-39],[SEPTEN]
    Avec 700 identifiants à supprimer, la regexp va être longue, mais peut-être pas si lente à l'exécution (regexp simple).
    Sinon, il est possible de transformer chaque identifiant en une regexp, et de les appliquer toutes pour chaque ligne à traiter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my @id = ("Bilan interne Formation FTB FESSENHEIM S38-39", "PV de mise en service SEPTEN");
    my @to_remove = ("Bilan interne Formation", "PV de mise en service");
    my @remove_re = map "\\s*" . (s/ +/\\s+/g , $_ ) . "\\s*", @to_remove;
    foreach my $id (@id) {
      $id =~ s/$_//g foreach @remove_re;
    };
    say "Id = ", join ",", map "[$_]", @id;
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par leilan Voir le message
    @6ril23 : non je ne passerais pas par une base car cela met impossible je traite les données comme elles arrivent car elles sont l’enchainement de plusieurs requêtes qui réponde à plusieurs critères ect...
    là j'arrive pas à comprendre! Ta désignation correspond bien à un champs d'une de tes tables non?

    Citation Envoyé par leilan Voir le message
    Si j'ai ouvert un autre sujet c'est que je fait plus la même chose donc ne regardons pas les autres sujets sinon on va se perdre.
    La problématique globale est toujours la même, tu cherches à modifier une chaine de caractère en une autre à ce que j'ai compris

    Citation Envoyé par leilan Voir le message
    Je veux soit supprimer entièrement la désignation soit garder des bout que j'aurai choisi.
    Exemple :

    Revue Livraison. C'est ce que j'appelle un Type jalon car dans ma nouvelle base il est déjà présent. Je ne vais pas y garder. Par contre, si j'ai :
    Revue Livraison '"Guide pédagogique". Je vais garder "Guide pédagogique".
    Je pense qu'avec 700 regex, il te sera très difficile de faire quelque chose de propre, sans interférence et traitant un grand nombre de cas

    Citation Envoyé par leilan Voir le message
    Mais ce que je garde c'est moi qui le définit maintenant je veux trouver une régex qui supprime ce que je veux.
    Si t'as déjà fait tes 700 regex (non redondante et non exhautive) du style /Bilan interne Formation FTB FESSENHEIM S38-39/ ben j'ai bien envi de te dire que tu iras plus vite de définir ce que tu veux faire directement à la main s/Bilan interne Formation FTB FESSENHEIM S38-39/MaSubstitutionChoisie/g

    Citation Envoyé par leilan Voir le message
    Je vais géré les importance aujourd'hui et mettre les cas spéciaux en haut de ma liste et les communs en bas.
    quand tu parles de cas spéciaux/communs, c'est en terme de fréquence? si c'est le cas, c'est complètement l'inverse qu'il faut faire. Il faut mettre en haut de la liste les cas susceptible d'être rencontrés le plus souvent car sinon à chaque traitement tu vas faire des vérif qui matcheront que très rarement

  14. #14
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    @Philou67430 : Je travail sur ta solution et ... CA MARCHE !
    J'ai encore quelques désignations qui passe entre les mailles de mon filet met pas pour longtemps. C'est strictement les mêmes chaînes mais je ne désespère pas =)

    @6ril23 : Grâce a Philou j'ai diminué de moitié mes regexs.
    Je traite une base de données remplis à la main par une personne qui n'utilise pas tout le temps les mêmes terme, qui fait des fautes dans ses désignation. Cette base de donnée comporte plus de 3000 lignes je me retrouve avec 778 désignations identiques je pense que c'est déjà raisonnable.
    Ma base de données, la nouvelle est beaucoup plus strict que l'ancienne d'où tous ses traitements. je fais des croisement de donnée entre plusieurs tables de plusieurs base. ect Enfin c'est un script pas très simple mais je suis obligé.

    Donc c'est très gentil 6ril23 mais dans le peux d’expérience que j'ai et ma grande ignorance j'essaie de ne pas resté fermé dans une seule et même idée. Mais non, je ne passerais pas par une table pour faire tout ça. Je dois pallier au erreurs humaines. Passer d'une base laxiste à une super structuré donc contraignante.

    Merci tous les deux ! Vous êtes mes petits anges =)

  15. #15
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    Le but c'est d'abandonner la base laxiste au profit de ta base, ou vous allez conserver ces 2 bases en parallèle et devrez régulièrement refaire le travail que tu fais actuellement?

    si c'est la 1ère solution, je pense que ma proposition de faire ta modif "à la main" serait la plus rapide au lieu de développer quelque chose de générique (c'est pas la solution la plus propre/jolie mais celle qui te demanderais le moins de temps)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $Expression =~ s/^\s*Bilan\s+interne\s+Formation\s+FTB\s+FESSENHEIM\s+S38-39\s*$/FTB\s+FESSENHEIM\s+S38-39/ig;
    $Expression =~ s/^\s*PV\s+de\s+mise\s+en\s+service\s+SEPTEN\s*$/SEPTEN/ig;
    ...

  16. #16
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    c'est un script qui va être executé qu'une fois.
    Et c'est plus rapide de le traité par un script que à la main ^^
    Ou sinon je demande un CDI tout de suite ici xD

  17. #17
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    je crois que tu n'as pas compris ce que je veux dire par "à la main": évidemment je ne te demande pas de reprendre chaque désignation pour la modifier

    il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Expression =~  s/^\s*Message\s+non\s+redondant\s*$/Ce que je veux avoir/ig;
    en bleu: ce que tu as déjà (liste non redondante de tes désignations)
    en rouge: ce que tu remplis à la main en fonction de ce que tu souhaites conserver

  18. #18
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    ah oki ^^
    Et bien j'ai testé cette solution mais je ne sais pas pourquoi c’était pas très fiable. Je vais résoudre ce sujet car la solution de philou est parfaite

    A bientôt ! et Merci vraiment à tous les deux

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

Discussions similaires

  1. [regex] substitution avec sed
    Par tiresias54 dans le forum Linux
    Réponses: 6
    Dernier message: 26/04/2012, 16h26
  2. Problem avec un REGEX
    Par Death83 dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 22h36
  3. [langage] autre probleme de regex
    Par Ludo167 dans le forum Langage
    Réponses: 3
    Dernier message: 18/08/2004, 17h01
  4. [langage] probleme de regex
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 18/08/2004, 15h36
  5. [langage] Problème de substitution
    Par telecnop dans le forum Langage
    Réponses: 4
    Dernier message: 25/07/2003, 10h00

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