Plage de chiffre dans un tableau d'integer

Résolu
berlioz1204 Messages postés 12 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 21 septembre 2011 - 21 sept. 2011 à 09:03
cs_Jack Messages postés 14006 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

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 sept. 2011 à 10:49
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)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 sept. 2011 à 10:43
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)
0
berlioz1204 Messages postés 12 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 21 septembre 2011
21 sept. 2011 à 17:40
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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 sept. 2011 à 20:10
lol, de rien
0
Rejoignez-nous