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

SQL Oracle Discussion :

Manipuler des chaines de caractères


Sujet :

SQL Oracle

  1. #1
    Membre actif
    Homme Profil pro
    Développeur WEB - Admin Réseaux
    Inscrit en
    Décembre 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Développeur WEB - Admin Réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 153
    Points : 286
    Points
    286
    Par défaut Manipuler des chaines de caractères
    Bonjour,

    J'ai une question ou plutôt un souci que je n'arrive pas a résoudre et j'aurais souhaité un peu d'aide car je ne m'en sors pas.

    Je m'explique:

    Dans une table j'ai 8 chaines de caractères, toutes dans la même colonne mais avec des identifiants différents, voici les chaines:

    chaine1 : "Ce compresseur 12V se branche sur l'allume-cigare et permet "
    chaine2 : "de regonfler n'importe où les pneus, ballons, accessoires pn"
    chaine3 : "eumatiques etc... grâce à ses trois embouts fournis.<br /><u"
    chaine4 : "l><li>Pression maximale : 250 PSI. 17 bars.</li><li>Alimenta"
    chaine5 : "tion : 12 Continu.</li><li>Diamètre du cylindre : 16 mm.</li"
    chaine6 : "><li>Accessoires fournis : aiguille pour gonfler les ballons"
    chaine7 : " et 2 adaptateurs.</li><li>Dimensions : 163x88x123mm.</li><l"
    chaine8 : "i>Poids : 0.4kg.</li><li>Agrément CE/RoHS</li></ul> "


    Toutes ces chaines assemblées forment un texte, en l’occurrence la description d'un produit (mais ce n'est pas ce qui nous intéresse)

    Comme on peut le voir, ces chaines sont composées de balise HTML car elles sont également affichées dans un site web. Mais mon souci c'est qu'il faut que je les affiche dans une édition qui utilise du SQL. Et surtout que je les formate comme dans la page web.
    A savoir que dans mon logiciel d'édition je peux mettre le résultat d'une requête dans une variable.

    En fait il faudrait que je me retrouve avec ce résultat là:

    Ce compresseur 12V se branche sur l'allume-cigare et permet de regonfler n'importe où les pneus, ballons, accessoires pneumatiques etc... grâce à ses trois embouts fournis.
    Pression maximale : 250 PSI. 17 bars.
    Alimentation : 12 Continu.
    Diamètre du cylindre : 16 mm.
    Accessoires fournis : aiguille pour gonfler les ballons et 2 adaptateurs.
    Dimensions : 163x88x123mm.
    Poids : 0.4kg.
    Agrément CE/RoHS


    Donc en fait je pensais utiliser les balises HTML de mes chaines pour les formater en SQL et les insérer dans des variables pour pouvoir les afficher comme ci-dessus.

    Je me bataille avec des substr, des replace, des instr et autres depuis plusieurs jours mais je ne trouve pas de solutions viables. Et donc c'est pour cela que je poste sur ce forum en espérant que vous pourriez m'éclairez.

    Je ne suis peut être pas très clair dans mes explications, au besoin n'hésitez en m'en demander plus.

    merci d'avance pour votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 290
    Points : 426
    Points
    426
    Par défaut
    Bonjour,

    Si vous êtes en 10g+, vous pouvez jouer avec les expressions rationnelles.

    http://download.oracle.com/docs/cd/B...nctions130.htm

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 949
    Points : 5 848
    Points
    5 848
    Par défaut
    Une 1ere piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with t as (
      select prod_id, LISTAGG(description, '') WITHIN GROUP (ORDER BY chaine_ordre) AS total_desc
        from desc_prod
       group by prod_id
    )
    select regexp_replace(replace(total_desc,'<li>',chr(10)),'<[^<]*?>','') as total_desc from t
    A noter que :
    - j'ai utilisé listagg pour concaténer les lignes, regarde String Aggregation Techniques si ta version d'oracle est inférieure à 11GR2.
    - je n'ai remplacé que les balises <li> en retour chariot car d'après l'exemple c'était suffisant mais il sera peut être pertinant de modifier aussi d'autres balises comme <p> ou <br />...
    - J'ai pompé l'expression régulière sur internet, je ne sais pas si c'est ce qu'il y a de plus optimisé car je ne suis pas très compétent en la matière.
    Ci dessous le jeu de test :
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    SQL> create table desc_prod (prod_id integer,chaine_ordre integer,description varchar2(100))
      2  /
     
    Table created.
     
    SQL> var v varchar2(100);
    SQL> exec :v := q'[Ce compresseur 12V se branche sur l'allume-cigare et permet ]';
     
    PL/SQL procedure successfully completed.
     
    SQL> insert into desc_prod values (1,1,:v)
      2  /
     
    1 row created.
     
    SQL> exec :v := q'[de regonfler n'importe où les pneus, ballons, accessoires pn]';
     
    PL/SQL procedure successfully completed.
     
    SQL> insert into desc_prod values (1,2,:v)
      2  /
     
    1 row created.
     
    SQL> exec :v := q'[eumatiques etc... grâce à ses trois embouts fournis.<br /><u]';
     
    PL/SQL procedure successfully completed.
     
    SQL> insert into desc_prod values (1,3,:v)
      2  /
     
    1 row created.
     
    SQL> exec :v := q'[l><li>Pression maximale : 250 PSI. 17 bars.</li><li>Alimenta]';
     
    PL/SQL procedure successfully completed.
     
    SQL> insert into desc_prod values (1,4,:v)
      2  /
     
    1 row created.
     
    SQL> exec :v := q'[tion : 12 Continu.</li><li>Diamètre du cylindre : 16 mm.</li]';
     
    PL/SQL procedure successfully completed.
     
    SQL> insert into desc_prod values (1,5,:v)
      2  /
     
    1 row created.
     
    SQL> exec :v := q'[><li>Accessoires fournis : aiguille pour gonfler les ballons]';
     
    PL/SQL procedure successfully completed.
     
    SQL> insert into desc_prod values (1,6,:v)
      2  /
     
    1 row created.
     
    SQL> exec :v := q'[ et 2 adaptateurs.</li><li>Dimensions : 163x88x123mm.</li><l]';
     
    PL/SQL procedure successfully completed.
     
    SQL> insert into desc_prod values (1,7,:v)
      2  /
     
    1 row created.
     
    SQL> exec :v := q'[i>Poids : 0.4kg.</li><li>Agrément CE/RoHS</li></ul> ]';
     
    PL/SQL procedure successfully completed.
     
    SQL> insert into desc_prod values (1,8,:v)
      2  /
     
    1 row created.
     
    SQL> commit
      2  /
     
    Commit complete.
     
    SQL> 
    SQL> with t as (
      2    select prod_id, LISTAGG(description, '') WITHIN GROUP (ORDER BY chaine_ordre) AS total_desc
      3      from desc_prod
      4     group by prod_id
      5  )
      6  select regexp_replace(replace(total_desc,'<li>',chr(10)),'<[^<]*?>','') as total_desc from t
      7  /
     
    TOTAL_DESC
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Ce compresseur 12V se branche sur l'allume-cigare et permet de regonfler n'importe où les pneus, ballons, accessoires pneumatiques etc... grâce à ses trois embouts fournis.
    Pression maximale : 250 PSI. 17 bars.
    Alimentation : 12 Continu.
    Diamètre du cylindre : 16 mm.
    Accessoires fournis : aiguille pour gonfler les ballons et 2 adaptateurs.
    Dimensions : 163x88x123mm.
    Poids : 0.4kg.
    Agrément CE/RoHS
     
     
    SQL>

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    xml + stylesheet...

  5. #5
    Membre actif
    Homme Profil pro
    Développeur WEB - Admin Réseaux
    Inscrit en
    Décembre 2004
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Développeur WEB - Admin Réseaux
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2004
    Messages : 153
    Points : 286
    Points
    286
    Par défaut
    Bonjour et merci pour vos réponses.

    Je vais tester cela et je vous dirais si ça fonctionne avec mon logiciels d'éditions.

    Je vous tiens au courant , merci encore.

Discussions similaires

  1. Manipulation des chaines de caractères
    Par Chris L' Arabis dans le forum Langage
    Réponses: 5
    Dernier message: 11/06/2014, 17h31
  2. [WD17] Manipuler des chaines de caractères Arabe
    Par nouyanouya dans le forum WinDev
    Réponses: 7
    Dernier message: 22/11/2013, 12h35
  3. Manipulation des chaines de caractères
    Par Dominique49 dans le forum Langage
    Réponses: 2
    Dernier message: 05/10/2011, 00h05
  4. Manipulation des chaines : supprimer certains caractères
    Par pierrepo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/11/2009, 21h25
  5. Manipulation des chaines de caractères en c
    Par developppez dans le forum C
    Réponses: 8
    Dernier message: 29/04/2007, 13h04

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