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

Dotnet Discussion :

Récuperer les entiers dans un string [Débutant]


Sujet :

Dotnet

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut Récuperer les entiers dans un string
    Bonjour,

    je recherche une solution pour récupérer les entiers présent dans mon string en VB comme ci-dessous:

    dim chaine as string = ""
    chaine= "vlan 30 40 50 70 526 1852"

    Donc j obitendrais 30,40,50....
    Quelqu'un aurait-t-il une idée ?

    ps: je pense passer par la méthode TocharArray pour transformer la chaine en tableau de caractère. Mais je n'ai pas réussi a aboutir.

    Cordialement,
    Kévin

  2. #2
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Bonjour,

    C'est assez simple, l'algo serait une itération sur tous les caractères. en c# sans IDE, ça donnerait :

    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
     
     
    string chaine = "vlan 30 40 50 70 526 1852";
    string nombre = string.empty;
    list<int> liste = new List<int>;
     
    for(int i = 0;i<chaine.length;i++)
    {
       if (char.isnumber(chaine, i))
      {
        nombre += chaine[i];
      }
      else
      {
        if (!string.isnullorempty(nombre))
        {
          liste.add(int.parse(nombre));
          nombre = string.empty;
        }
      }
     
    }
    Bon dév.

  3. #3
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    bon, avec un ide, ça donne ça :

    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
                string chaine = "vlan 30 40 50 70 526 1852";
                List<int> liste = new List<int>();
     
                string nombre = string.Empty;
     
                for (int i = 0; i < chaine.Length; i++)
                {
                    if (char.IsNumber(chaine, i))
                    {
                        nombre += chaine[i];
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(nombre))
                        {
                            liste.Add(int.Parse(nombre));
                            nombre = string.Empty;
                        }
                    }
                }
                if (!string.IsNullOrEmpty(nombre))
                {
                    liste.Add(int.Parse(nombre));
                }

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    On peut aussi utiliser une regular expression :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var chaine = "vlan 30 40 50 70 526 1852";
    var results = Regex.Matches(chaine, @"\d+");
     
    foreach (var result in results)
    {
        Console.WriteLine(result);
    }

    Citation Envoyé par Résultat :
    30
    40
    50
    70
    526
    1852
    Sachant que l'expression \d+ permet de récupérer un entier, et que la variable results est de type MatchCollection.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Bonjour,


    Je vous remercie tout les deux pour l’intérêt que vous avez porté a ma demande. J'ai pris connaissance de vos deux propositions et de mon coté j'ai essayé de developper un algo.
    Celui-ci est le suivant ( Je suis en VB.net )

    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
     
    Dim listeVlan As ArrayList
            listeVlan = New ArrayList
     
     
            Dim caractere As Char() = chaine.ToCharArray
            Dim i As Integer = 12
            Dim vlan As String = ""
     
            While i < caractere.Length
                If caractere(i) = " " Then
                    Console.WriteLine("espace rencontré")
                Else
                    If caractere(i - 1) = " " Then
                        vlan = caractere(i)
     
                    Else
                        If caractere(i + 1) = " " Or i + 1 >= caractere.Length Then
                            vlan = vlan + caractere(i)
                            MsgBox(vlan)
                            listeVlan.Add(vlan)
                        Else
                            vlan = vlan + caractere(i)
     
                        End If
     
                    End If
                End If
     
                i = i + 1
            End While
     
            Return listeVlan
    Celui-ci marche mais j'ai une erreur d'index pour la fin de chaine.
    Les fonctions que vous utilisés en C# sont elle présente en VB ?

    Cordialement,
    Kévin

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par kevin01330 Voir le message
    Les fonctions que vous utilisés en C# sont elle présente en VB ?
    Oui, ça donne quelque chose comme ceci :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim chaine = "vlan 30 40 50 70 526 1852"
    Dim results = Regex.Matches(chaine, "\d+")
     
    For Each result As var In results
        Console.WriteLine(result)
    Next
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Merci DotNetMatt pour cette aide.

    Cependant,j'ai une derniere petite question si tu me le permet.
    J'ai une exception de type invalidCast quand je compile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     For Each result As Integer In results
                Console.WriteLine(result)
                listeVlan.Add(result)
     
            Next
    Ce qui est normal. Connaissez vous comment caster ce type "match" en "integer". En effet, j’appelle ensuite une fonction pour lire la liste "listeVlan".

    Cordialement,
    Kévin

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Tu peux faire :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    listeVlan.Add(Convert.ToInt32(result.ToString()))
    Ca converti directement la valeur en entier
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Merci a toi

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Il y un problème lorsque j'affiche la liste.
    1893
    1901
    2400
    2401
    3001
    3021
    3053
    3061
    Fin
    1893
    0
    1901
    2
    2400
    4
    2401
    6
    3001
    8
    3021
    10
    3053
    12
    3061
    14
    En effet, il converti l'espace entre chaque entier en entier (0,2,4,6,8).
    Avez vous une idée ?

  11. #11
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    C'est quoi ta liste de valeurs ? Il faut peut-être ajuster un peu la regex.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  12. #12
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Voila ma chaine de caractère :

    vlan batch 193 101 200 201 301 321 353 61
    donc ma liste doit contenir 193,101,200,201,301,321,353,61

    Mon code est le suivant :

    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
     
    Public Shared Function traitementVlan(ByVal chaine As String)
            Dim results As MatchCollection
            Dim listeVlan As ArrayList
            listeVlan = New ArrayList
     
            results = Regex.Matches(chaine, "\d+")
     
            For Each result As Match In results
                Console.WriteLine(result)
                listeVlan.Add(listeVlan.Add(Convert.ToInt32(result.ToString())))
            Next
            Return listeVlan
     
        End Function

  13. #13
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Tu appelles deux fois la méthode Add de ton ArrayList listeVlan, ça doit être pour ça. Remplace ça :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    listeVlan.Add(listeVlan.Add(Convert.ToInt32(result.ToString())))

    par ça :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    listeVlan.Add(Convert.ToInt32(result.ToString()))

    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    C'était bien ça, je te remercie

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

Discussions similaires

  1. Récuper les identifiants dans un string
    Par Tazze-99 dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 27/12/2011, 18h13
  2. Réponses: 6
    Dernier message: 31/07/2006, 17h01
  3. Réponses: 7
    Dernier message: 14/09/2005, 11h50
  4. mettre un entier dans une string
    Par kinder29 dans le forum SL & STL
    Réponses: 14
    Dernier message: 14/02/2005, 12h54
  5. Sélectionner tous les entiers dans une fourchette
    Par ludo.guy dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/07/2004, 10h15

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