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 :

Aide sur recherche de caractères en PlSql.


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut Aide sur recherche de caractères en PlSql.
    Bonjour,
    J'aimerai savoir j ai une chaine de caractère qui est inférieure à 4000 caractères mais pas loin.

    et je dois faire une recherche particulière sur cette chaîne pour retrouver l'identifiant

    exemple j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x_result := ffweafefwefwqercwqcqweqerewe <br> <br> Directeur : hhtps:77ccccc.eer.gr/inmnn_gggg/!nom.htm?ww_i_identifiant=88888=22<br>;

    Et dans cette chaîne Je dois identifier le numero :8888822 ce qui implique de supprimer le = s'il y a. et cette identifiant est toujours identifier de cette manière :
    !nom.htm?ww_i_identifiant


    Pourriez vous m'aider ou me donner des pistes svp pour extraire l'information que j'ai besoin don l'identifiant.

    Merci d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Utilisez les fonctions suivantes :

    SUBSTR
    INSTR
    REPLACE

    Les détails sont ici : http://sheikyerbouti.developpez.com/...e=Chap3#SUBSTR

  3. #3
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,

    Qu'elle est ta version ?
    Avec la 10g
    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
     
    SELECT REGEXP_REPLACE
              ('ffweafefwefwqercwqcqweqerewe <br> <br> Directeur : hhtps:77ccccc.eer.gr/inmnn_gggg/!nom.htm?ww_i_identifiant=88888=22<br>;',
               'ww_i_identifiant=(.*)=(.*)',
               'ww_i_identifiant=\1\2'
              ) txt 
      FROM DUAL;
     
     
    TXT                                                                                                                      
    -------------------------------------------------------------------------------------------------------------------------
    ffweafefwefwqercwqcqweqerewe <br> <br> Directeur : hhtps:77ccccc.eer.gr/inmnn_gggg/!nom.htm?ww_i_identifiant=8888822<br>;
     
     
    1 row selected.
    Ou si tu cherches la chaine !nom.htm?ww_i_identifiant=88888=22
    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
     
     
    SELECT REGEXP_REPLACE
              ('ffweafefwefwqercwqcqweqerewe <br> <br> Directeur : hhtps:77ccccc.eer.gr/inmnn_gggg/!nom.htm?ww_i_identifiant=88888=22<br>;',
               '\!nom.htm\?ww_i_identifiant=(.*)=(.*)',
               '!nom.htm?ww_i_identifiant=\1\2'
              ) txt 
      FROM DUAL
     
     
    TXT                                                                                                                      
    -------------------------------------------------------------------------------------------------------------------------
    ffweafefwefwqercwqcqweqerewe <br> <br> Directeur : hhtps:77ccccc.eer.gr/inmnn_gggg/!nom.htm?ww_i_identifiant=8888822<br>;
     
     
    1 row selected.
    Si ton code est constitué uniquement des chiffres.

    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
     
    SELECT REGEXP_REPLACE
              ('ffweafefwefwqercwqcqweqerewe <br> <br> Directeur : hhtps:77ccccc.eer.gr/inmnn_gggg/!nom.htm?ww_i_identifiant=88888=22<br>;',
               '\!nom.htm\?ww_i_identifiant=([0-9]+)=([0-9]+)',
               '!nom.htm?ww_i_identifiant=\1\2'
              ) txt
      FROM DUAL;
     
     
    TXT                                                                                                                      
    -------------------------------------------------------------------------------------------------------------------------
    ffweafefwefwqercwqcqweqerewe <br> <br> Directeur : hhtps:77ccccc.eer.gr/inmnn_gggg/!nom.htm?ww_i_identifiant=8888822<br>;
     
     
    1 row selected.
    Cordialement salim.

  4. #4
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut news
    Merci pour vos réponses.
    par contre pour les dernières réponses : j ai ce message : ORA-00904: "REGEXP_REPLACE": invalid identifier

    Apparemment je n ai pas la bonne version.

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Les expressions régulières sont disponible à partir de la version 10g.

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    j ai la 9.

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Avec les fonctions indiquées par 7gy* :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select substr(str, 1, instr(str, '!nom.htm?ww_i_identifiant')+25) ||
           replace(substr(str, instr(str, '!nom.htm?ww_i_identifiant')+26), '=', '') as new_str
      from
    (
    select 'ffweafefwefwqercwqcqweqerewe <br> <br> Directeur : hhtps:77ccccc.eer.gr/inmnn_gggg/!nom.htm?ww_i_identifiant=88888=22<br>;' as str
      from dual
    );
     
    NEW_STR
    ffweafefwefwqercwqcqweqerewe <br> <br> Directeur : hhtps:77ccccc.eer.gr/inmnn_gggg/!nom.htm?ww_i_identifiant=8888822<br>;

  8. #8
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    bonjour,
    Y a t-il une instruction particulière pour chercher une sous chaine spécifique dans une chaine dont on connait le début :

    exemple :
    j 'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'toto bnbnbnbmmcmmcm DO'
    je ne connais que toto et ma longueur de chaine peut varier.
    Je ne sais que mon début de chaine commence par toto et je dois extraire DO de cette chaine?
    pourriez vous m'aider ?


    merci

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par prugne Voir le message
    Y a t-il une instruction particulière pour chercher une sous chaine spécifique dans une chaine dont on connait le début :
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Utilisez les fonctions suivantes :
    SUBSTR
    INSTR
    REPLACE
    Les détails sont ici : http://sheikyerbouti.developpez.com/...e=Chap3#SUBSTR
    Vous pensez que j'interviens juste pour faire monter mon compteur?

  10. #10
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    j'ai fait un exemple mais cela ne fonctionne 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    declare
     
      utilFormEmailRef varchar2(10);
      positionDepart number;
      positionFin    number;
      utilFormInter  varchar2(256);
      result boolean := true;
      corpsEmail varchar(4000)  := '<p>  Admin : vvvvv / xxxxx / vvvvv (toto) / DO2222222</p>';
     
     
     
     
    begin
     
     
        if instr(corpsEmail, '<p>  Admin') > 0 then
     
          positionDepart := instr(corpsEmail, '<p>  Admin');
     
          positionFin    := instr(corpsEmail, '<p>  Admin') + length('<p>  Admin');
     
           while (w_b_result) loop
     
              utilFormInter := substr('<p>  Admin',positionFin);
     
            if utilFormInter in ('DO') then
     
              utilFormEmailRef := utilFormEmailRef || utilFormInter;
     
            else
     
              w_b_result:= false;
     
            end if;
           positionFin := positionFin + 1;
     
          end loop;
     
     
        end if;
     
    end;
    j'aimerai juste avoir 2222222 comme résultat final.

  11. #11
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Houlala.. ça manque de rigueur tout ça..
    Rien que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    utilFormInter := substr('<p>  Admin',positionFin);
    suivant tous les positionFin possible, tu ne peux avoir comme retour que
    <p> Admin
    p> Admin
    > Admin
    Admin
    Admin
    dmin
    min
    in
    n
    NULL
    Un code se construit et se teste pas à pas.

    Bon, sinon pour la question de retrouver 2222222, il manque des précisions : comment savoir que c'est la chaine 2222222 qu'il faut ramener et pas 2222222</p> ?
    Ensuite, s'il y a 2 DO dans la chaine qu'est ce qu'il faut prendre ?
    En plus vu le texte, les changements d'énoncés, il est possible que le "<p> Admin ...</p>" soit une partie du texte complet, genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '<p>Client ... DO11111</p><p>Admin.... DO222</p><p>Toto.. DO3333</p>'

    Bref, en admettant qu'on prend le dernier DO du <p>Admin .. </p>
    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
     
    DECLARE
    utilFormEmailRef   VARCHAR2(4000);
    corpsEmail varchar(4000)  := '<p>Toto DO111</p><p>  Admin : vvvvv / xxxxx / vvvvv (toto) / DO2222222</p><p>DODO AU LIT</p>';
    v_chaine VARCHAR2(4000);
    BEGIN
    IF instr(corpsEmail, '<p>  Admin') > 0 
    then
      -- Récupération de l'élement <p>Admin..
      v_chaine := SUBSTR(corpsEmail, INSTR(corpsEmail, '<p>  Admin'));
      -- On ne garde que jusqu'au prochain </p> (sans le prendre)
      v_chaine := SUBSTR(v_chaine, 1, INSTR(v_chaine, '</p>')-1);
      -- S'il y a un DO, on récupère la partie de la chaine à partir de là (on prend le dernier DO)
      utilFormEmailRef  := SUBSTR(v_chaine, INSTR(v_chaine, 'DO', -1)+2);
    END IF;
    END;
    Le code est détaillé, il est bien sur optimisable en regroupant les instructions, mais c'est pour la compréhension de la façon de traiter le sujet.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  12. #12
    Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 134
    Points : 66
    Points
    66
    Par défaut merci
    merci pour votre éclaircissement
    Pour répondre à vos questions : s'il y a plusieurs DO dans la chaine, il faut le laisser et toujours récupérer le DO avec les digit associés.
    Pour l'instant j'ai toujours le Admin en début de texte de ligne.
    Je vais essayer votre code.

Discussions similaires

  1. aide sur rechercher vba
    Par fpouzou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/11/2009, 02h45
  2. aide sur recherche de plan de mémoire
    Par mptijr dans le forum Stages
    Réponses: 0
    Dernier message: 17/10/2009, 11h12
  3. Aide sur une fonction / pbm de manipulation de caractère
    Par captainamerica75 dans le forum Access
    Réponses: 3
    Dernier message: 16/02/2006, 11h54
  4. Réponses: 6
    Dernier message: 07/02/2006, 18h31
  5. Besoin d'aide sur un script SQL de recherche
    Par agougeon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/10/2005, 11h40

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