Plage de chiffre dans un tableau d'integer [Résolu]

Messages postés
12
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
21 septembre 2011
- - Dernière réponse : cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
- 21 sept. 2011 à 20:10
Bonjour tout le monde,

j'ai un peu honte de posté cette demande mais au bout d'une journée sans solution optimisée ça m'a gonflé.

Alors mon problème:
l'utilisateur sélectionne dans une list numérotée de 1 à 256 des plages de chiffres que je veux simplifié.
Exemple: la sélection me retourne un tableau d'integer {1,9,63,64,65,66,67,68,69,70,241,242,243,254} et je veux simplifier dans un textbox de la façon suivante: "1;9;63-70;241-243;254" ou le "-" symbolise une plage

si vous avez une solution, je suis preneur

merci
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
3
Merci
A peaufiner car, si le dernier paquet de valeurs est une suite, elle n'est pas incluse dans le résultat.

Version corrigée :
        Dim maListe() As Integer = {1, 9, 63, 64, 65, 66, 67, 68, 69, 70, 241, 242, 243, 253, 254, 333}
        Dim mStart As Integer = 0
        Dim mLast As Integer = 0
        Dim sResult As String = ""

        mStart = maListe(LBound(maListe))
        mLast = mStart
        sResult = mStart.ToString
        For r As Short = (LBound(maListe) + 1) To UBound(maListe)
            If maListe(r) = mLast + 1 Then
                ' La valeur suivante suit numéiquement la précédente
                ' Mémorise
                mLast = maListe(r)
            Else
                ' Pas de suite : on va écrire la chaine
                If mStart = mLast Then
                    ' Il n'y a pas eu de suite numérique
                    sResult += ";" & maListe(r).ToString
                Else
                    ' Il y a eu une suite numérique
                    sResult += "-" & mLast.ToString & ";" & maListe(r).ToString
                End If
                ' Mémorise
                mLast = maListe(r)
                mStart = mLast
            End If
        Next
        ' Cas des suites numériques en fin de liste
        If mStart <> mLast Then
            ' Il y a eu une suite numérique
            sResult += "-" & mLast.ToString
        End If

        Debug.Print(sResult)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 210 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
Salut

Pas bien compliqué, suffit de se concentrer.
Dim maListe() As Integer = {1, 9, 63, 64, 65, 66, 67, 68, 69, 70, 241, 242, 243, 254}
Dim mStart As Integer = 0
Dim mLast As Integer = 0
Dim sResult As String = ""

mStart = maListe(LBound(maListe))
mLast = mStart
sResult = mStart.ToString
For r As Short = (LBound(maListe) + 1) To UBound(maListe)
    If maListe(r) = mLast + 1 Then
        ' La valeur suivante suit numéiquement la précédente
        ' Mémorise
        mLast = maListe(r)
    Else
        ' Pas de suite : on va écrire la chaine
        If mStart = mLast Then
            ' Il n'y a pas eu de suite numérique
            sResult += ";" & maListe(r).ToString
            ' Mémorise
            mLast = maListe(r)
            mStart = mLast
        Else
            ' Il y a eu une suite numérique
            sResult += "-" & mLast.ToString & ";" & maListe(r).ToString
            ' Mémorise
            mLast = maListe(r)
            mStart = mLast
        End If
    End If
Next

Debug.Print(sResult)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
12
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
21 septembre 2011
0
Merci
MERCI Jack

j’avais déjà honte en postant le message mais je suis encore honteux en voyant la solution

merci de la réactivité en tout cas
Commenter la réponse de berlioz1204
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
0
Merci
lol, de rien
Commenter la réponse de cs_Jack