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

Oracle Discussion :

[9i] Tri dans une chaine


Sujet :

Oracle

  1. #1
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut [9i] Tri dans une chaine
    Bonjour,
    j'ai une chaine de caratères ou champs
    exemple 'A,F,C,H,P,Z,F,6,D,8'

    et je souhaite la trier afin d'avoir : 'A,C,D,F,H,P,Z,6,8'.

    Je pensais mettre cette chaine dans un tableau avec chaque ligne = 1 car et ensuite procédé à un tri dichotomique

    Mais avant si une autre personne à une solution plus rapide je suis prenneur

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Vous pouvez vous baser sur le code ASCII des caractères:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Declare
      c varchar2(100) := 'A,F,C,H,P,Z,F,6,D,8' ;
      type typ_tab is table of varchar2(1) index by binary_integer ;
      tc typ_tab ;
    Begin
      For i IN 1 .. length(c) loop
        tc(ascii(substr(c,i,1))) := substr(c,i,1) ;
      End loop ;
      For i IN tc.first .. tc.last Loop
        if tc.exists(i) Then
          dbms_output.put_line( tc(i) ) ;
        end if ;
      End loop ;
    End;
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre du Club Avatar de atruong
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2006
    Messages : 69
    Points : 55
    Points
    55
    Par défaut
    ouchh, çà fait +15min que je cherche comment faire.
    Super cette solution

    Dans une autre de tes réponses, j'ai vu que tu parlais de passage de tableau dans un curseur lui-même trié.
    Comment fait-on cela ???
    "La même bouche qui dispense des bons conseils peut déclarer des guerres." (proverbe asiatique)

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Ca c'est rusé !
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  5. #5
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut


    J'ai eu une même sorte d'idée mais plus complexe en faite avec l'utilisation des collection indexé par charchar2

    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
    
    DECLARE
    TYPE typ_var1 ISTABLEOFVARCHAR2(1)INDEXBYVARCHAR2(1);
    wtab typ_var1;
    wstr varchar2(50):='A,F,C,H,P,Z,F,6,D,8'||',';
    wstr_temp varchar2(1);
    wpos_prec pls_integer:=0;
    wpos_suiv pls_integer:=1;
    BEGIN
    --SPLIT de la chaine en tableau indexé avec varchar2'
    while instr(wstr,',',wpos_suiv+1)>0loop
    wpos_suiv := instr(wstr,',',wpos_suiv+1);
    wstr_temp := rtrim(ltrim(substr(wstr,wpos_prec,wpos_suiv-wpos_prec),','),',');
    wtab(wstr_temp):= wstr_temp;
    wpos_prec := wpos_suiv;
    wpos_suiv := instr(wstr,',',wpos_prec);
    endloop;
    --Lecture du tableau '
    wstr_temp := wtab.FIRST;
    while wstr_temp isnotnullloop
    dbms_output.put_line(wtab(wstr_temp));
    wstr_temp := wtab.next(wstr_temp);
    endloop;
    END;
    /
    
    Bon c'est un premier jet mais cela fonctionne aussi.

    Mais si tu permets je vais prendre ton code très cher SheikYerbouti

  6. #6
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    ATTENTION LES DEUX CODES PROPOSES SUPPRIME LES DOUBLONS

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par sygale
    ATTENTION LES DEUX CODES PROPOSES SUPPRIME LES DOUBLONS
    Fallait bien qu'il y ait un hic !.....
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  8. #8
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Voici une version qui corrige le bug:

    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
    Declare
      c varchar2(100) := 'A,F,C,H,P,Z,F,6,D,8,F' ;
      type typ_rec is record ( lettre Varchar2(10), nbre pls_integer ) ;
      type tab_rec is table of typ_rec index by binary_integer ;
      tabr tab_rec ;
      result Varchar2(100) ;
    Begin
      For i IN 1 .. length(c) loop
        If substr(c,i,1) <> ',' Then
          tabr(ascii(substr(c,i,1))).lettre := substr(c,i,1) ;
          tabr(ascii(substr(c,i,1))).nbre := nvl(tabr(ascii(substr(c,i,1))).nbre,0) + 1 ;
        End if ;
      End loop ;
      For i IN tabr.first .. tabr.last Loop
        if tabr.exists(i) Then
          For j IN 1 .. tabr(i).nbre Loop
            result := result || tabr(i).lettre ;
          End loop ;
        end if ;
      End loop ;
      dbms_output.put_line( result ) ;
    End;
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

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

Discussions similaires

  1. tri dans une liste chainée.
    Par cedrico2010 dans le forum Débuter
    Réponses: 2
    Dernier message: 18/02/2011, 17h51
  2. Réponses: 23
    Dernier message: 16/11/2002, 19h41
  3. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  4. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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