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 :

Traitement de données Vb.net List / array


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Octobre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Octobre 2019
    Messages : 10
    Par défaut Traitement de données Vb.net List / array
    Bonjour à tous,

    Je butte actuellement sur un petit problème de traitement de données

    Je reçois celles-ci sous la forme suivante : (Date, point de vente, total, quantité, heure)
    "20180101", "01", "10", "2", "11:00"
    "20180101", "01", "10", "2", "12:00"
    "20180101", "01", "10", "2", "15:00"
    "20180102", "01", "10", "2", "17:00"
    "20190101", "01", "20", "3", "12:00"
    "20190202", "01", "10", "2", "19:00"
    "20190202", "01", "10", "2", "23:00"
    "20190401", "01", "10", "2", "12:00"
    "20200101", "01", "10", "2", "12:00"
    "20200201", "01", "10", "2", "20:00"
    "20200201", "01", "10", "2", "23:00"
    "20200301", "01", "10", "2", "12:00"
    "20200302", "01", "10", "2", "20:00"

    Je dois ensuite faire un traitement de ces données, de tel sorte que je puisse faire un reporting du nombre de vente journalière sur une tranche horaire
    J'imaginais pouvoir faire un tableau à 3 dimensions qui serait l'année, le mois et la date pour ensuite pouvoir faire mes cumuls.
    Mais je bloque sur la manière de le concevoir.
    Sachant que je pensais arriver à un résultat du style

    T("2018")("01")("01") = {{"01", "10", "2", "11:00"},{"01", "10", "2", "12:00"},{"01", "10", "2", "15:00"}}
    T("2018")("01")("02") = {{"01", "10", "2", "17:00"}}
    ...

    Je ne sais pas si je prends le problème dans le mauvais sens, mais en tout cas tout avis est le bienvenu

    Merci d'avance

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    Une forme étrange. D'où proviennent-elles ? d'une base de données, d'un fichier texte ,etc...

  3. #3
    Membre habitué
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Octobre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Octobre 2019
    Messages : 10
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    Une forme étrange. D'où proviennent-elles ? d'une base de données, d'un fichier texte ,etc...
    Les données proviennent d'une base de données Windev et sont classées dans une List(Of Donnees) ou Donnees est une classe contenant 5 variables de type String

    C'est ce que représente l'exemple

  4. #4
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    Citation Envoyé par Poxa67 Voir le message
    Les données proviennent d'une base de données Windev et sont classées dans une List(Of Donnees) ou Donnees est une classe contenant 5 variables de type String

    C'est ce que représente l'exemple
    Le type de données Object (fourre tout ) est ton ami :
    1/ code .vb du class Donnee d'exemple censé mimer tes données Windev:
    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
     
    Public Class Donnee
        Public Property [Date] As String
        Public Property PointVente As String
        Public Property Total As String
        Public Property Quantite As String
        Public Property Heure As String
        Public Sub New()
        End Sub
        Public Sub New(oDate As String, oPV As String, oTot As String, oQte As String, oHeure As String)
            Me.New()
     
            [Date] = oDate
            PointVente = oPV
            Total = oTot
            Quantite = oQte
            Heure = oHeure
        End Sub
    End Class
    2/ code du form user chargé du traitement :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
     
    Public Class Form1
        Private donnees As New List(Of Donnee)
        Private arr()() As Object 'le MAUDIT ou MAGIC "yagged array"(tableau en escalier) puisque tu aimes les tableaux 
     
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
            LoadData()
     
        End Sub
     
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
     
            arr = New Object(donnees.Count)() {}
     
            For row As Integer = 0 To donnees.Count - 1
                Dim donnee As Donnee = donnees(row)
                arr(row) = New Object(3) {} ' 4 colonnes :type Date, type string,type  Double,type entier
                Dim annees, mois, jours, heures, minutes As Integer
                annees = Convert.ToInt32(donnee.Date.Substring(0, 4))
                mois = Convert.ToInt32(donnee.Date.Substring(4, 2))
                jours = Convert.ToInt32(donnee.Date.Substring(6, 2))
                Dim HeureMins() As String = donnee.Heure.Split(":")
                heures = Convert.ToInt32(HeureMins(0))
                minutes = Convert.ToInt32(HeureMins(1))
     
                arr(row)(0) = New Date(annees, mois, jours, heures, minutes, 0)
                arr(row)(1) = CStr(donnee.PointVente)
                arr(row)(2) = Convert.ToDouble(donnee.Total)
                arr(row)(3) = Convert.ToDouble(donnee.Quantite)
     
            Next
        End Sub
     
        Private Sub LoadData()
     
            donnees.Add(New Donnee("20180101", "01", "10", "2", "11:00"))
            donnees.Add(New Donnee("20180101", "01", "10", "2", "12:00"))
            donnees.Add(New Donnee("20180101", "01", "10", "2", "15:00"))
            donnees.Add(New Donnee("20180102", "01", "10", "2", "17:00"))
            donnees.Add(New Donnee("20190101", "01", "20", "3", "12:00"))
            donnees.Add(New Donnee("20190202", "01", "10", "2", "19:00"))
            donnees.Add(New Donnee("20190202", "01", "10", "2", "23:00"))
            donnees.Add(New Donnee("20190401", "01", "10", "2", "12:00"))
            donnees.Add(New Donnee("20200101", "01", "10", "2", "12:00"))
            donnees.Add(New Donnee("20200201", "01", "10", "2", "20:00"))
            donnees.Add(New Donnee("20200201", "01", "10", "2", "23:00"))
            donnees.Add(New Donnee("20200301", "01", "10", "2", "12:00"))
            donnees.Add(New Donnee("20200302", "01", "10", "2", "20:00"))
        End Sub
     
     
    End Class
    Tu n'as qu'a rajouter deux combos pour storer les Dates (début et fin) de ton List(of Donnees) et choisir de totaliser selon l'intervalle de dates ou une date donnee.
    bon code...

  5. #5
    Membre habitué
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Octobre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Octobre 2019
    Messages : 10
    Par défaut
    Bonjour MABROUKI,

    Merci pour ta solution qui confirme ce que j'ai fait, même si j'ai l'impression que ta solution est un peu plus concise que la mienne. Bravo

  6. #6
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonsoir,

    Au moins, les dates inversées permettent un tri aisé ...

    La table à 3 dimensions est une solution parmi d'autres mais dont la mise au point algorithmique peut être difficile (pour un débutant ?), de plus il semble que les indices n'apportent rien aux données.
    Personnellement, vu l'énoncé que tu fais de ton problème, je m'intéresserais davantage aux collections (Dictionary ou autre), ou à la DataTable.

    Peux-tu nous informer de ce que représente "Total" par rapport aux autres données ? Si c'est une valeur aisément re-calculable, on pourrait la retirer du lot à traiter, ce serait toujours ça.
    Il serait intéressant aussi que tu nous donnes un exemple chiffré de ce que tu veux extraire comme résultat.

    ...


  7. #7
    Membre habitué
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Octobre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique

    Informations forums :
    Inscription : Octobre 2019
    Messages : 10
    Par défaut
    Citation Envoyé par Phil Rob Voir le message
    Bonsoir,

    Au moins, les dates inversées permettent un tri aisé ...

    La table à 3 dimensions est une solution parmi d'autres mais dont la mise au point algorithmique peut être difficile (pour un débutant ?), de plus il semble que les indices n'apportent rien aux données.
    Personnellement, vu l'énoncé que tu fais de ton problème, je m'intéresserais davantage aux collections (Dictionary ou autre), ou à la DataTable.

    Peux-tu nous informer de ce que représente "Total" par rapport aux autres données ? Si c'est une valeur aisément re-calculable, on pourrait la retirer du lot à traiter, ce serait toujours ça.
    Il serait intéressant aussi que tu nous donnes un exemple chiffré de ce que tu veux extraire comme résultat.

    ...

    oui heureusement pour les dates
    Le total est simplement le coût de la commande.

    En fait la ou je buttais, c’était de faire le tableau à 3 dimensions , j'ai entre temps perdu des cheveux, mais j'ai fait un système de tableau en escaliers qui fait le boulot.

    Donc dans mon exemple
    T(0)(0)(0)=3 <- représente le nombre de jour identique pour faire un cumul des valeurs
    T(0)(0)(1)=1
    T(1)(0)(0)=1
    T(1)(1)(0)=2
    T(1)(2)(0)=1
    T(2)(0)(0)=1
    T(2)(1)(0)=2
    T(2)(2)(1)=2

    On voit que le total fait bien 13 ce qui me rassure, mais je me demande quelle serait la façon optimale de le faire
    Dans mon cas je suis passé par 3 boucles "For" pour y arriver. Une pour les années, puis une pour les mois et enfin une pour les jours.

    J'ai dit que mon tableau était en Integer mais j'aimerais qu'il soit d'un type de classe qui contiendrait un tableau de Double et un tableau de Integer
    Afin de pouvoir faire un tri sur les tranches horaires
    Par exemple :
    T(0)(0)(0).total(0) = 10 <- total de 11h00
    T(0)(0)(0).total(1) = 10 <- total de 12h00
    T(0)(0)(0).total(2) = 10 <- total de 15h00
    Dans mon exemple je bloque sur l'initialisation du tableau de la classe, mais je vais encore chercher

    en tout cas merci d'avoir pris le temps de lire et répondre

  8. #8
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Tu as donc résolu ton problème avec le tableau à 3 dimensions ... Bravo !
    Mais comme tu connais cet outils, tu aurais pu utiliser aussi une List(Of Donnees) comme en WinDev, avec Donnees étant une classe ou une structure (à l'ancienne).

    Très bonne journée,


Discussions similaires

  1. Traitement de données dans un tableau ou liste de String
    Par liverbird dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/02/2016, 11h46
  2. Réponses: 0
    Dernier message: 24/04/2012, 21h30
  3. [Tableaux] Traitement de données dans un Array
    Par abeh25 dans le forum Langage
    Réponses: 9
    Dernier message: 30/06/2009, 13h57
  4. Réponses: 10
    Dernier message: 11/09/2008, 16h23
  5. Réponses: 1
    Dernier message: 10/09/2008, 15h41

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