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

VB.NET Discussion :

Les chaîne (String) en VB


Sujet :

VB.NET

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Points : 0
    Points
    0
    Par défaut Les chaîne (String) en VB
    Bonjour tous le monde,

    j'ai question a posé:

    Est ce qu'on pourrai calculer une moyenne d'une chaîne qui est composée de 56 données ( les données sont des nombre)?

    Merci d'avance.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    oui, tu peux récupérer les différentes valeurs de ta chaîne avec la fonction Split suivant un caractère de séparation.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Oui j'ai utilisé Split avec un espace entre les valeurs, et j'ai utiliser le programme suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim convelements As Integer 
     
    ' la j'ai converti elements qui est un string en integer
     
    convelements = val(elements)
     
    Dim moyenne = moyenne.Take(10).average()
    cosole.write(moyenne)
    mais il m'affiche que Take n'est pas un membre de 'Integer'

    merci pour votre réponse.

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Voilà comment je voyais ça :
    - on split la string,
    - on parcourt les items ; pour chacune : on cast la valeur en int qu'on ajoute à une variable,
    - on divise le tout par le nombre d'éléments de la chaine splitée
    Dans ton code, à part Console.Write() (mal orthographié) je ne comprends pas grand chose.
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Points : 0
    Points
    0
    Par défaut
    je m'explique un peu plus,

    J'ai (elements) comme un String (chaine).
    J'ai déclaré (convelements) comme integer pour convertir ma chaine en integer.
    puis j'ai tenter de calculer la moyenne des 10 valeurs que j'ai en utilisant convelements.Take(10).Average()

  6. #6
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Et à quel moment tu split ? ...
    De plus, et après recherche, la fonction val() ne semble plus exister en VB.NET.

    Je te mets un bout de code en C# qui fait le taff, après je te laisse y réfléchir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	string elements = "12 13 14 15 87 96 364";
    	int total = 0;
    	double moyenne = 0.0;
    	string[] vals = elements.Split(' ');
    	if (vals.Length > 0) {
    		foreach (string val in vals)
    			total += int.Parse(val);
    		moyenne = 1.0 *total / vals.Length;
    	}
    Plus je connais de langages, plus j'aime le C.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Points : 0
    Points
    0
    Par défaut
    Voila je vous partage le bout de code que j'ai fait:
    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
     Dim Split As String() = Data.Split(New [Char]() {" "c, ","c, CChar(vbTab)})
            For Each s As String In Split
                If s.Trim() <> "" Then
     
                    Dim i As Integer
     
                    For Each elements As String In s.Split(" ")
                        If i > 20 And i < 28 Or i > 31 And i < 39 Or i > 42 And i < 50 Or i > 53 And i < 61 Or i > 64 And i < 72 Or i > 75 And i < 83 Or i > 86 And i < 94 Or i > 97 And i < 105 Then
                            ' Traitement de chaques éléments récupérés:
                            'Console.Write(elements & " ")
     
                            'découper elements
                            Split = elements.Split(New [Char]() {" "c, ","c, CChar(vbTab)})
                            For Each j As String In Split
                                If j.Trim() <> "" Then
     
                                    Dim numbers As Integer = (j)
                                    Dim average As Double = numbers.Take(3).Average()
     
                                End If
                                Console.Write(j & " ")
                            Next j
     
                        End If
                                i = i + 1
                            Next
     
                        End If
            Next s
    il m'affiche toujours l'erreur suivante: error BC30456: 'Take' n'est pas un membre de 'Integer'.

    merci bien de me débloquer.

  8. #8
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Evite de nommer tes variables avec des noms utilisés par le langage comme split

    Si tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Split As String() = Data.Split(New [Char]() {" "c, ","c, CChar(vbTab)})
    pourquoi écrire dans ta boucle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For Each elements As String In s.Split(" ")
    tu écris
    If i > 20...
    où dans le code as tu assigné une valeur à i ?

    Peux tu expliquer ce que dois faire ton code ?

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Points : 0
    Points
    0
    Par défaut
    Merci pour votre réponse,

    Dans le code, j'ai découpé Data qui est un string de 128 valeurs avec Split et j'ai supprimer les valeurs dont je n'ai pas besoin, j'ai récupérer les données que je veux dans elements qui comporte 56 valeurs, et là je veux faire une moyenne sur chaque 7 valeurs qui se suit par exemple la moyenne de la première valeurs jusqu'a la 7 et de la 8ieme jusqu'à la 14 ieme et ainsi de suite. Et récupérer les moyenne a la fin.

    Merci beaucoup.

  10. #10
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par samirraoui Voir le message
    Merci pour votre réponse,

    Dans le code, j'ai découpé Data qui est un string de 128 valeurs avec Split et j'ai supprimer les valeurs dont je n'ai pas besoin, j'ai récupérer les données que je veux dans elements qui comporte 56 valeurs, et là je veux faire une moyenne sur chaque 7 valeurs qui se suit par exemple la moyenne de la première valeurs jusqu'a la 7 et de la 8ieme jusqu'à la 14 ieme et ainsi de suite. Et récupérer les moyenne a la fin.

    Merci beaucoup.
    Le message d'erreur te dit que la classe Integer n'a pas de méthode Take. Donc ton Take ne peut pas être utilisé de la façon dont tu l'utilises. Ceci dit ton Take, tu le prends où ?
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Points : 0
    Points
    0
    Par défaut
    Bonsoir,

    Take() c'est pour bien précisé le nombre de valeurs pour faire la moyenne.

    J'ai vu qu'il existe cette commande comme ça
    Dim average As Double = numbers.Take(3).Average()

    c'est pour lui donner le nombre de valeurs a moyenné (par exemple dans ce cas, il me ferra la moyenne de trois premières valeurs)

    et y a aussi une autre commande:

    Dim average As Double = numbers.Average()
    elle me fait la moyenne de toute la chaîne.

    si vous avez une autre méthode elle sera la bienvenue. Merci pour votre aide.

  12. #12
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If i > 20 And i < 28 Or i > 31 And i < 39 Or i > 42 And i < 50 Or i > 53 And i < 61 Or i > 64 And i < 72 Or i > 75 And i < 83 Or i > 86 And i < 94 Or i > 97 And i < 105 Then
    tel que tu as écris je suis presque sur que tu vas obtenir une erreur

    Quels sont les éléments que tu veux récuperer ?

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Points : 0
    Points
    0
    Par défaut
    Les 128 valeurs sont des valeurs qui changent a chaque fois que je fait l'acquisition des données d'un capteur. se sont pas des valeurs fixes. je vous donne un exemple ( 125.58 8.2584 125.325 14 258.14 125 ........)

    Merci encore une autre fois.

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Points : 0
    Points
    0
    Par défaut
    Donc a chaque fois que je demande au capteur une acquisition de données, il me donne une chaine de 128 valeurs comme par exemple ( 125.58 8.2584 125.325 14 258.14 125 ........)

  15. #15
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par samirraoui Voir le message
    Les 128 valeurs sont des valeurs qui changent a chaque fois que je fait l'acquisition des données d'un capteur. se sont pas des valeurs fixes. je vous donne un exemple ( 125.58 8.2584 125.325 14 258.14 125 ........)

    Merci encore une autre fois.
    Tu n'as répondu à la question
    Quels sont les éléments que tu veux récuperer ?
    tu obtiens toujours une chaine de 128 valeurs
    la question est quels valeurs dois tu récuperer ?

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Points : 0
    Points
    0
    Par défaut
    Suivant ce bout de code, j'ai récupéré une chaine Data(qui est une chaine de 128 valeurs) et j'ai fait découper ma chaine avec Split, j'ai déclaré elements comme string pour récupérer 56 valeurs des 128 de Data. et je veux calculer une moyenne pour les 56 valeurs de elements mais je doit faire une moyenne de chaque 7 valeurs qui se suit. Pour cela j'ai utiliser la fonction suivante : Dim average As Double = numbers.Take(7).Average()

    avec ça il m'affiche une erreur suivante : error BC30456: 'Take' n'est pas un membre de 'Integer'

    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
    Dim Split As String() = Data.Split(New [Char]() {" "c, ","c, CChar(vbTab)})
            For Each s As String In Split
                If s.Trim() <> "" Then
     
                    Dim i As Integer
     
                    For Each elements As String In s.Split(" ")
                        If i > 20 And i < 28 Or i > 31 And i < 39 Or i > 42 And i < 50 Or i > 53 And i < 61 Or i > 64 And i < 72 Or i > 75 And i < 83 Or i > 86 And i < 94 Or i > 97 And i < 105 Then
                            ' Traitement de chaques éléments récupérés:
                            'Console.Write(elements & " ")
     
                            'découper elements
                            Split = elements.Split(New [Char]() {" "c, ","c, CChar(vbTab)})
                            For Each j As String In Split
                                If j.Trim() <> "" Then
     
                                    Dim numbers As Integer = (j)
                                    Dim average As Double = numbers.Take(7).Average()
     
                                End If
                                Console.Write(j & " ")
                            Next j
     
                        End If
                                i = i + 1
                            Next
     
                        End If
            Next s

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2015
    Messages : 46
    Points : 0
    Points
    0
    Par défaut
    Mais dans ce bout de code je récupère les données le plus normalement et je les affiche bien avec console.Write(elements),

    ce que je veux moi c'est de faire une moyenne pour les valeurs de la chaine elements.

    Merci pour votre réponse.

  18. #18
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Tu découpes ta chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim Split As String() = Data.Split(New [Char]() {" "c, ","c, CChar(vbTab)})
    alors pourquoi tu la découpes de nouveau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each s As String In Split
        If s.Trim() <> "" Then
           Dim i As Integer
           For Each elements As String In s.Split(" ")

    vaut mieux écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim split As String() = data.Split(New [Char]() {" "c, ","c, Convert.ToChar(Keys.Tab)}, StringSplitOptions.RemoveEmptyEntries)

  19. #19
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    A priori les parenthèses serait inutiles (point de vue code pas point de vue lisibilité parce que là ) ; il semblerait que ce soit une suite d'intervalles donc i > min1 And i < max1 Or i > min2 And i < max2 '... fonctionnera comme souhaité.
    Après ça serait encore mieux avec des AndAlso et des OrElse on zapperait ainsi tous les tests inutiles dès lors que ceux déjà effectués permettent de déjà connaitre le résultat final ; mais je serait carrément partisan d'un Select Case là même avec seulement un cas plus le Case Else, sa capacité à gérer les intervalles rendrait le tout plus lisible.

    Ensuite plutôt que d'avoir un premier split ; puis un second (dont je ne comprends pas vraiment l'intérêt) des cast en nombre à l'arrache (merci Option Strict Off) remettons un peu les choses à plat.

    Tu pars d'une trame et tu veux extraire ces nombres, filtrer ceux qui t'intéressent et faire les moyennes de 7 en 7 alors fais donc ça étape par étape.
    1. on part de la chaine "nombre_1 nombre_2 ... nombre_n" -> on la splitte ce qui nous donne un tableau de chaines [ "nombre_1", "nombre_2", ..., "nombre_n" ]
    2. on convertit ce tableau en tableau de nombres -> [ nombre_1, nombre_2, ..., nombre_n ] (penser à Enumerable.Select ou Array.ConvertAll) [Note: que faire en cas théorique "d'intrus" (un truc qui n'est pas un nombre) dans le tas ?)
    3. on transforme notre tableau de nombres en tableau de tableaux de nombres, chacun de 7 éléments -> [ [ nombre_1, nombre_2, ..., nombre_7 ], [ nombre_8, ..., nombre_n ] ] (plusieurs méthodes là, on y reviendra au besoin) [Note: que faire du dernier tableau qui peut théoriquement avoir moins de 7 éléments ?]
    4. on fait la moyenne de chaque "sous-tableau" -> [ moyenne_1_7, moyenne_8_n ] (a priori un Enumerable.Average devrait suffire)
    5. exploiter les résultats -> Enjoy

    Pour l'histoire du regroupement, on peut faire ça "impérativement", on parcourt notre tableau de nombres, et on ajoute au premier sous-tableau tant qu'il n'y a pas le compte, puis on continue avec le suivant (ça reste un pseudo-code général pour pas trop griller la solution [penser au modulo et à la division entière ]
    (Une autre approche, consisterait à passer par du Linq avec un petit "trick" (qui fait en gros la même chose qu'évoqué juste avant))

    Comme dirait l'autre, "y'a plus qu'à"
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  20. #20
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    ne lui fais pas trop peur

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 14
    Dernier message: 16/08/2014, 19h05
  2. Uniquement les premiers string d'une chaîne
    Par lucazzo dans le forum C#
    Réponses: 4
    Dernier message: 20/07/2010, 14h06
  3. JQuery flot et les chaînes (string)
    Par Valter dans le forum jQuery
    Réponses: 4
    Dernier message: 16/05/2009, 02h17
  4. [C#] Rassembler les chaines ( string )
    Par smyley dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/01/2005, 18h27
  5. Les raw strings
    Par c_kiki dans le forum Général Python
    Réponses: 1
    Dernier message: 11/11/2004, 13h26

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