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 :

Comparaison de chaîne : position des erreurs


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 39
    Points
    39
    Par défaut Comparaison de chaîne : position des erreurs
    Bonjour,

    Un nouveau problème en Perl!
    En effet j'aimerais que lorsque que je compare 2 chaînes de caractères Perl puisse me renvoyer la position des erreurs dans la chaîne.

    Par exemple, si je compare "Le bateau est bleu" à "La batequ est bley" il me renvoie les valeurs 1,7,17 (ou autre valeur me permettant de situer l'erreur).
    Si on a "Le bateau est rouge", alors il me renvoie une position initial et final (genre 14-17 dans ce cas)(mais vraiment pas obliger, il peut me renvoyer 14, 15, 16, 17 ca me va aussi...).

    Je sais pas si de t'elle fonction existe, mais je n'ai rien trouvé sous google, ni sous Devellopez.com. Au besoin je peu utiliser ou programmer des programme tiers qui ferait la chose. (Si possible pas de langage necessitant d'autre interprèteur, ou machine virtuel ou pas trop lourd alors )

    Voila si quelqu'un a une idée ou a déjà fait ca merci d'éclairer ma lanterne!

    Edit : a oui et il faudrait que cela marche en comparant une string et une regex ^^ Je m'explique : la regex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m/Le bateau est b(eau)|(leu)/
    ne rends pas d'erreur avec les string "Le bateau est beau" et "Le bateau est bleu", mais si il ya une erreur renvoie leur position. Je sais vraiment pas si cela peu étre possible :/

  2. #2
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Je sais qu'on recommande de réutiliser le code, mais demander un module juste pour ça...
    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
    sub errors {
      my ($str1, $str2) = @_;
      my @errors;
      my @str1 = split //, $str1;
      my @str2 = split //, $str2;
      unless( @str1 == @str2 ) {
        warn <<EOT;
    errors() sub should be used on strings of the same length :
    <$str1>
    <$str2>
    EOT
        return (0.. @str1);
      }
      for my $i ( 0..$#str1 ){
        push @errors, $i unless $str1[$i] eq $str2[$i];
      }
      return @errors;
    }
    Par ailleurs, pour des mesures plus fines des modifications entre deux chaînes, il y a des modules que tu peux trouver en cherchant "Diff" sur le CPAN.

    --
    Jedaï

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 39
    Points
    39
    Par défaut
    Je viens justement de trouver le module Diff dans CPAN, et j'étais en train de regarder ses possibilités.
    Je regarde ton code et tente de le comprendre aussi.

    Ah, et j'ai rajouté un edit juste avant que tu post ta réponse, du coup je pense pas que ton script marche si on prends en compte la mofdifications que j'ai faite.

    Merci de ta réponse en tout cas!

    Edit : vraiment pas bête ton script! quand on y réfléchis la solutions étais a porté de main! Par contre comme je le disais au dessus on ne peu pas utiliser de regex en entré :/ (ou du moins je ne pense pas, mais peu être que je me trompe)

  4. #4
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Mayeu
    Edit : a oui et il faudrait que cela marche en comparant une string et une regex ^^ Je m'explique : la regex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m/Le bateau est b(eau)|(leu)/
    ne rends pas d'erreur avec les string "Le bateau est beau" et "Le bateau est bleu", mais si il ya une erreur renvoie leur position. Je sais vraiment pas si cela peu étre possible :/
    Et donc si la chaîne est "Le bateau est bgeu", que renvois-tu ? (15) ou (15,16) ? Je crains que tu ne t'engages sur une impasse, essaie plutôt de nous expliquer ce que tu veux faire et à quoi ces informations vont-elles te servir ?

    --
    Jedaï

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 39
    Points
    39
    Par défaut
    Dans ce cas la je renvoie 15.

    Pour l'explication du contexte je compte m'en servir pour trouver les errerus dans des séquence d'ADN (je sais qu'il existe un forum bioinformatique, mais il est beaucoup moins vue, la preuve, mon message la bas n'a toujours pas de réponse ^^, mais j'ai bien précisé dans l'autre forum qu'il y avait le message original ici)

    Donc le but est le suivant si j'ai la regex
    Je veux donc quel match toute les combinaisons possible, mais que si il y'a une erreur, que je puisse en savoir la position, pour l'afficher a l'écran, ou pour effectuer d'autre traitement derrière. Par exemple si il y'a trois erreur de suite, on abandonne la sequence.

    Voila j'éspèr avoir était assez clair!

    Merci d'avance.

    Edit : j'ai eu une idée. En adaptant ton script, je découpe la regex de manière a ce que ce qu'on trouve entre crochet le reste, et au lieu de faire des eq, je peu faire des match avec la regex Je travaille la dessus, si y'a d'autre idée je prends aussi!

  6. #6
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Mayeu
    Dans ce cas la je renvoie 15.
    Pourquoi ?

    Citation Envoyé par Mayeu
    Pour l'explication du contexte je compte m'en servir pour trouver les errerus dans des séquence d'ADN (je sais qu'il existe un forum bioinformatique, mais il est beaucoup moins vue, la preuve, mon message la bas n'a toujours pas de réponse ^^, mais j'ai bien précisé dans l'autre forum qu'il y avait le message original ici)
    Ce que tu as fait s'appelle du multipostage, et c'est MAL, je te signale que je lis tous les forums Perl, donc si tu n'avais posté qu'en bioinformatique, je t'aurais tout autant répondu...

    Citation Envoyé par Mayeu
    Donc le but est le suivant si j'ai la regex
    Je veux donc quel match toute les combinaisons possible, mais que si il y'a une erreur, que je puisse en savoir la position, pour l'afficher a l'écran, ou pour effectuer d'autre traitement derrière. Par exemple si il y'a trois erreur de suite, on abandonne la sequence.

    Voila j'éspèr avoir était assez clair!

    Merci d'avance.

    Edit : j'ai eu une idée. En adaptant ton script, je découpe la regex de manière a ce que ce qu'on trouve entre crochet le reste, et au lieu de faire des eq, je peu faire des match avec la regex Je travaille la dessus, si y'a d'autre idée je prends aussi!
    Tant qu'il s'agit simplement de classe de caractère, tout est clair (il n'y a qu'une liste d'erreur possible), dans le cas des alternatives, il faut une spécification plus précise.

    --
    Jedaï

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 39
    Points
    39
    Par défaut
    Citation Envoyé par Jedai
    Pourquoi ?
    Car la possibilité que le dernier mot finisse par "eu" éxiste, il ne s'agit donc pas d'une erreur.

    Citation Envoyé par Jedai
    Ce que tu as fait s'appelle du multipostage, et c'est MAL, je te signale que je lis tous les forums Perl, donc si tu n'avais posté qu'en bioinformatique, je t'aurais tout autant répondu...
    J'en suis désolé . Mais contrairement a toi je pense que certaine personne ce cantone a un seul forum ou en évite certain pensant qu'il n'y trouverai rien, et surtout je pensais que cela pourrais aider des gens des "deux cotés de la barrière".



    Citation Envoyé par Jedai
    Tant qu'il s'agit simplement de classe de caractère, tout est clair (il n'y a qu'une liste d'erreur possible), dans le cas des alternatives, il faut une spécification plus précise.
    C'est vrai que mon premier exemple ne colle pas avec mon deuxième! En tout cas je pense que le découpage de la regex (dans le cadre de classe de caractère) reste une bonne alternative. A moins que tu vois autre chose?

  8. #8
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Mayeu
    J'en suis désolé . Mais contrairement a toi je pense que certaine personne ce cantone a un seul forum ou en évite certain pensant qu'il n'y trouverai rien, et surtout je pensais que cela pourrais aider des gens des "deux cotés de la barrière".
    Je comprend tout à fait ton point de vue et il est défendable, puisque la question peut légitimement être posée dans les deux forums. Mais c'est là la limitation d'un forum : on ne peut pas poster un message dans deux forums à la fois, il s'agit forcément de deux messages différents ayant même contenu... A partir de là on obtient le résultat classique du multipost (même quand l'un des message référence l'autre) : les discussions divergent. Les règles du forum condamnent donc légitimement le multipost comme nuisible au débat (et de toute façon la plupart des multiposts sont issues de personnes pressées et le faisant savoir, sans signaler qu'ils ont posté ailleurs, il est nécessaire d'être strict pour éviter ce genre de débordement, même dans un cas acceptable comme le tien).

    Par ailleurs ton idée semble correcte, de plus vu ta réponse sur les alternatives, il m'apparait que tu les vois plus comme une suite de classe de caractère ( leu|eau == [le][ea]u ), ce qu'elles ne sont pas dans une véritable regex mais qui permet une interprétation non-ambigüe de ta demande.

    --
    Jedaï

  9. #9
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 57
    Points : 39
    Points
    39
    Par défaut
    Voila j'ai pu m'en sortir parfaitement avec comme base le script que tu m'a fournit! Le mien est un peu plus rustique, "brut" d'une certaine façon ^^
    Donc merci encore!

    Et surement a un prochain problème

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/05/2011, 12h08
  2. comparaison de chaînes (des chaînes, beaucoup de chaînes!)
    Par kain_tn dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 19/06/2009, 14h01
  3. [RegEx] Positions des sous-chaînes grâce aux regex
    Par oneTime dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2008, 13h57
  4. comparaison du contenu de 2 tableaux indifféremment de la position des éléments
    Par delma dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 16/11/2006, 15h07
  5. Changer dynamiquement la position des onglets
    Par ginnovy dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/09/2002, 18h24

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