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

PL/SQL Oracle Discussion :

Comparateur de chaine en pl/sql


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut Comparateur de chaine en pl/sql
    Bonjour,

    je cherche une solution algorithmique ou un début de source afin de comparer deux chaine pour trouver le nombre caractère qui diffère.
    exemples :
    ch1=>AAA ch2=>BAAA soit 1 caractère diffèrent
    ch1=>AAA ch2=>ABA soit 1 caractère diffèrent
    ch1=>AAA ch2=>ABAB soit 2 caractères diffèrents

    Avez-vous une idée ou un début de raisonnement pour m'aider dans cette galère, merci d'avance.[/b]

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Il faut faire un truc dans le genre de :
    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
    DECLARE
      v_ch1 VARCHAR2(50);
      v_ch2 VARCHAR2(50);
      nb    NUMBER;
      i     NUMBER;
    BEGIN
       Nb := 0;
       i  := 0;
       v_Ch1 := 'AABBC';
       v_ch2 := 'ABCDE';
       while i <= Length(v_Ch1)
       loop
         IF SubStr(v_Ch1, i, 1) <> SubStr(v_Ch2, i, 1) THEN
            nb := nb + 1;
         END IF;
         i := i + 1;
       end loop;  
       DBMS_OUTPUT.PUT_LINE('Entre les 2 chaines, il y a '||to_char(nb)||' caractères différents');
    END;  
    /
    en gérant un peu mieux les cas où les 2 chaines n'ont pas la même longueur....

  3. #3
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    La comparaison entre ABBBA et AA doit retourner quoi ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    pour moi il n'a rajouté que 3 caractères qui diffèrent par AA
    mais peut-être que se raisonnement est faux.

    ma problématique est la suivante :
    un utilisateur ne peux modifier le texte pricipale si il ne modifie au plus 15 caractères rapport au texte principale sachant qu'il peut rajouter un caractère en début,fin et milieu de mot.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    Ta condition fonctionnelle est TOUTE pourrie

    ca veut dire que je peux modifier

    "BONJOUR" en "xBxOxNxJxOxUxRxxxxxx"
    mais pas
    "Rue verte" en "Rue de la marche des rois de Flandre"

    Tout ce que tu peux faire, c'est pour chaque lettre de l'ancienne valeur voir si elle était là avant, et compter les nouvelles....
    DBA Oracle(OCA) / SQL Server 2000
    "Trop anticiper les problèmes, c'est parfois les générer..."

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par SFAUVEL
    Ta condition fonctionnelle est TOUTE pourrie

    ca veut dire que je peux modifier

    "BONJOUR" en "xBxOxNxJxOxUxRxxxxxx"
    mais pas
    "Rue verte" en "Rue de la marche des rois de Flandre"

    Tout ce que tu peux faire, c'est pour chaque lettre de l'ancienne valeur voir si elle était là avant, et compter les nouvelles....
    si ton premier cas j'aurais 12 caractères modifiés
    et dans l'autre 32 caractères modifiés espace compris

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    quel serait alors la solution la plus adéquote pour compter les caractères modifiés d'une chaine par rapport à une autre

  8. #8
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Attention : Multi-posts interdits sur ce site !

    Avant de chercher une requête qui fait le boulot, il faudrait définir un algorithme, et avant l'algorithme il faudrait des règles précises de mesure (et tu as l'air de ne pas savoir toi-même...) ; il sera toujours temps de l'implémenter après !
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par pgibone
    Attention : Multi-posts interdits sur ce site !
    Quel mutilpost ?

  10. #10
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par orafrance
    Citation Envoyé par pgibone
    Attention : Multi-posts interdits sur ce site !
    Quel mutilpost ?
    N'exagère pas je n'ai pas dis mutile-post, je ne suis pas violent

    Sinon dans le forum algorithme, il y a le même post !
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  11. #11
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    bon, ça va va c'est pas génant, c'est aussi de l'algo

  12. #12
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    Bah....

    Pour toute POSITION de 0 à longeurNouvelleChaine-1
    si NouvelleChaine[ POSITION ] n'existe pas dans AncienneChaine alors
    NbLettresNouvelles := NbLettresNouvelles + 1
    fin pour toute

    si NbLettresNouvelles > 15 alors
    CA VA PAS

    question à 100 balles : si avant il y avait 2 A et que j'en ajoute 1, est ce une nouveauté ? Dans ce cas mon algo simpliste est super faux 8)

    Mais je ne comprend surtout pas le besoin fonctionnel auquel que tu cherches à répondre. On devrait pouvoir faire mieux que cette drole de fonction foireuse que nous cherchons à écrire....
    DBA Oracle(OCA) / SQL Server 2000
    "Trop anticiper les problèmes, c'est parfois les générer..."

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    Apparement je dois appliqué l'algorithme de Levenshtein Distance
    http://www.merriampark.com/ld.htm#ALGORITHM

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

Discussions similaires

  1. problème chaine de connexion sql server 2005 express / c#
    Par tofke dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 17/01/2009, 17h37
  2. Chaine de connexion à SQL 2005
    Par zooffy dans le forum ASP
    Réponses: 2
    Dernier message: 20/09/2007, 09h25
  3. opération right(chaine,7) en SQL ?
    Par LeXo dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/10/2006, 13h00
  4. Chaine de connexion SQL via un ws
    Par Catz dans le forum IIS
    Réponses: 4
    Dernier message: 19/10/2006, 23h37
  5. Comparateur de chaine en pl/sql
    Par squalito dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 17/12/2004, 09h51

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