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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    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 confirmé
    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
    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;

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 69
    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 ???

  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
    Par défaut
    Ca c'est rusé !

  5. #5
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    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 éclairé

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

+ 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