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

VBScript Discussion :

éliminer les doublons dans un tableau


Sujet :

VBScript

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 13
    Par défaut
    Bonjours a tous,

    Voila je débute avec vbscript,
    Hier j'ai voulu essayer la fonction Random avec un tableau d'une dimension, je vous explique mon exemple :
    je veux créer un tableau d'une dimension et le remplir avec des numéros générer par random, jusque la tous est ok :
    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
     
    Option Explicit
     
    Dim max,min,i,n,Tab(4)
     
    '=============================='
    'Fonction Random
    '=============================='
     
    Function Random() 
     
    max=8
    min=1
    Randomize
    Random = (Int((max-min+1)*Rnd+min))
     
    End function
     
    '=============================='
    'End Fonction 
    '=============================='
     
    n = 1
     
    Do While n < 5 'remplissage du tableau avec do while 
     
    Tab(n-1) = Random()
     
    wscript.echo Tab(n-1) ' m'affiche les numéros rempli dans chaque ligne
     
    n = n + 1
     
    Loop
    Le problème c'est que Random rempli toujours le tableau avec des doublon, pour remédier a cela, j'ai essayé d'introduire une condition if avec des OR sur chaque ligne mais ça marche pas j'ai essayé aussi d'introduire un For each, mais rien non plus !

    Quelqu'un a une idée

    Merci d'avance

    donc pour clarifier les choses, je cherche comment introduire une condition dedans : tant qu'on trouve un doublon dans une ligne on rappelle la fonction Random pour le remplir a nouveau jus qu'on obtient un tableau sans doublon..

    Merci encore

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 127
    Par défaut
    Salut

    Depuis une source VB6 (pas de moi), que je ne parviens pas à retrouver sur DVP, mais que j'ai sur mon DD, j'ai adapté pour VBSCript
    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
    Dim MinI, MaxI
    Dim Msg
     
    Sub Tirage(MinI,MaxI)
    Dim TableauFinal()
    Dim i
    Dim Ch
    Dim Nb      'Variant pour splitter la chaine contenant les nombres à choisir
    Dim NbAleatoire  'Indice aléatoire pour choisir un élément de la chaine contenant les nombres
     
    ReDim TableauFinal(MaxI - MinI)
    'On va générer une chaine partant du premier au dernier chiffre (donc de 5 à 24 par défaut),
    'les chiffres étant séparés par une virgule
    'Par défaut on aura donc Ch = "5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24"
    Ch = MinI
    For i = MinI + 1 To MaxI
      Ch = Ch & "," & i
    Next
    'On met les chiffres dans un tableau issu du split de la chaine contenant tous les nombres
    Nb = Split(Ch, ",")
    'On tire un nombre x parmi les n éléments
    'Si ce nombre n'est pas le dernier de la liste, le nombre d'indice x devient le nombre d'indice n
    'Par exemple au premier tirage on tire le 7ème nombre parmi les 20, donc 7 pour mon exemple
    'Dans le tableau Nb, on remplace 7 par 24
    'Puis on tire un nombre x parmi les n - 1 éléments (donc parmi les 24 de mon tableau Nb),
    'ça ne peut pas être 7 puisqu'il a été remplacé par le 24ème
    'Si ce nombre n'est pas le n - 1  de la liste, le nombre d'indice x devient le nombre d'indice n - 1
    'Etc...
    Randomize 'Initialise le générateur de nombres aléatoires
    For i = MaxI - MinI To 0 Step -1
      NbAleatoire = Int((i + 1) * Rnd)
      TableauFinal(MaxI - MinI - i) = Nb(NbAleatoire)
      If NbAleatoire < i Then Nb(NbAleatoire) = Nb(i)
    Next
    Msg = ""
    For i = MinI To MaxI
      Msg = Msg & TableauFinal(i - MinI) & " , "
    Next
    end sub
     
    Tirage 5,24
     
    msgbox msg
    tu remplaces le nom du tableau par le tien, et tu supprimes la dernière boucle For .... Next, le mieux serait d'ailleurs de transformer la Sub en Function

    Motif de l'édit:
    j'ai fini par retrouver le source VB6
    Merci à OhMonBato et DarkVader
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2011
    Messages : 13
    Par défaut
    merci pour ta réponse ProgElecT, le code fonctionne très bien !

    Le problème c'est que je n'arrive pas a bien comprendre le contenu.. c'est un peut flou pour un débutant comme moi

    Sinon es ce que c'est possible de trouvé une solution en modifiant le code que j'ai posté ?

    Merci encore

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Une solution simple mais pas forcement performante avec ton code est de mettre le resultat de random dans une variable et dans ta boucle while de parcourir le tableau et tester chaque valeur avec le random.
    Si la valeur existe tu n'enregistre pas la valeur.

    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
     
    dim r
    dim exist
    Do While n < 5 'remplissage du tableau avec do while 
    r = Random()
    exist = false
    for i=lbound(Tab) to ubound(Tab)
        if Tab(i) = r then
            exist = true
            exit
        end if
    next
     
    if not exist then
     
    Tab(n-1) = r
     
    wscript.echo Tab(n-1) ' m'affiche les numéros rempli dans chaque ligne
     
    n = n + 1
    end if
     
    Loop
    Je n'ai pas testé mais un truc dans le genre devrais marcher et être plus compréhensible pour toi.

Discussions similaires

  1. Enlever les doublons dans un tableau
    Par supertoms dans le forum VBA Access
    Réponses: 4
    Dernier message: 02/06/2008, 23h43
  2. Réponses: 3
    Dernier message: 19/03/2007, 18h29
  3. [Tableaux] Rechercher les doublons dans un tableau
    Par jym_22 dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2006, 09h47
  4. Eliminer les doublons dans un tableau d'entiers
    Par engi dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 21/03/2006, 13h59
  5. [sql] [oracle] éliminer les doublons dans sum ?
    Par trungsi dans le forum Langage SQL
    Réponses: 14
    Dernier message: 04/03/2005, 12h29

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