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 :

Eviter les doublons des items dans une listview


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2021
    Messages : 117
    Points : 37
    Points
    37
    Par défaut Eviter les doublons des items dans une listview
    Bonjour,
    J'ai une listview avec 3 colonnes ,légume, couleur, quantité j'arrive a importer les données depuis un fichier .text et l'écrire dans la listview (liste)
    Je voudrais si j'ai le même légume, même couleur incrémenter la quantité afin de ne pas avoir plein de ligne
    Je sais pas pour ou commencer.
    A chaque ligne lu avant d'écrire il faut que je vérifie si le légume existe avec la même couleur si oui quantité +1
    J'arrive pas a faire cela


    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
    Dim monStreamReader As New StreamReader("T:\test.txt") 'Stream pour la lecture
            Dim legume,  couleur,, ligne As String
     
            Do
                ligne = monStreamReader.ReadLine
                If ligne <> "" Then
     
                            legume= ligne.Split(";")(3)
                            couleur = ligne.Split(";")(4)
     
                            Dim str As String() = New String(2) {}
                                str(0) = legume
                                str(1) = couleur
                                Dim lvi As New ListViewItem(str)
     
                               liste.Items.Add(lvi)
     
                    End If
                End If

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2021
    Messages : 117
    Points : 37
    Points
    37
    Par défaut
    J'ai réussi a faire la recherche mais comment je peux rajouter recherche légume + couleur et si j'ai les 2 modifier la quantité colonne 3.
    Et j'ai l'impression qu'il contrôle juste avec la valeur legume de la boucle avant et non un controle total car j'ai des doublons.



    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
    If liste.Items.Count > 0 Then
     
     
                                For i = 0 To lv4183.Items.Count - 1
     
                                    If lv4183.Items.Item(i).Text = legume Then
                                        MsgBox("modifier quantite") 
                                    Else
     
                                        Dim str As String() = New String(2) {}
                                        str(0) = legume
                                        str(1) = couleur
                                        Dim lvi As New ListViewItem(str)
                                        lv4183.Items.Add(lvi)
     
                                    End If
                                Next i
                            Else
     
                                Dim str As String() = New String(2) {}
                                str(0) = legume
                                str(1) = couleur
                                Dim lvi As New ListViewItem(str)
                                liste.Items.Add(lvi)
                            End If

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Ton principal problème est que tu cherches à tout faire en même temps.
    Il faut apprendre à décomposer ton traitement.

    Si tu dois regrouper tes légumes (ou les compter ou n'importe quoi) fait le avant de les afficher.
    Il est plus facile de travailler sur des données que sur leur représentation IHM.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2021
    Messages : 117
    Points : 37
    Points
    37
    Par défaut
    Merci popo j'ai réussi a avancer. J'aurai besoin d'un coup de main car je galère pas mal.
    J'ai réussi avec recherche légume mais pas légume et couleur .


    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
    If article.Items.Count = 0 Then
     
                                Dim str As String() = New String(2) {}
     
                                str(0) = legume
     
                                str(1) = couleur
     
                                Dim lvi As New ListViewItem(str)
     
                                article.Items.Add(lvi)
     
                            Else
     
                                With article
     
                                    Dim itm As ListViewItem
                                    itm = .FindItemWithText(legume, True, 0, True)
     
                                    If Not itm Is Nothing Then
                                        MsgBox("est deja dans la liste a ajouter colonne quantité")
                                    Else
                                        Dim itm1 As ListViewItem
                                        itm1 = .FindItemWithText(couleur, True, 0, True)
                                        If Not itm Is Nothing Then
     
                                        Else
                                            Dim str1 As String() = New String(2) {}
                                            str1(0) = legume
                                            str1(1) = couleur
                                            Dim lvi1 As New ListViewItem(str1)
                                            article.Items.Add(lvi1)
     
                                        End If
     
     
                                        Dim str As String() = New String(2) {}
                                            str(0) = legume
                                            str(1) = couleur
                                            Dim lvi As New ListViewItem(str)
                                            article.Items.Add(lvi)
                                        End If
     
     
                                End With

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2021
    Messages : 117
    Points : 37
    Points
    37
    Par défaut
    Merci popo j'ai réussi a avancer je pense que ça fonctionne est ce que l'on peut l'ecrire plus simple ?


    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
    If article.Items.Count = 0 Then
     
                                Dim str As String() = New String(2) {}
     
                                str(0) = legume
     
                                str(1) = couleur
     
                                Dim lvi As New ListViewItem(str)
     
                                article.Items.Add(lvi)
     
                            Else
     
                                With article
     
                                    Dim itm As ListViewItem
                                    itm = .FindItemWithText(legume, True, 0, True)
                                    Dim itm1 As ListViewItem
                                    itm1 = .FindItemWithText(couleur, True, 0, True)
     
                                    If Not itm Is Nothing And Not itm1 Is Nothing Then
                                        MsgBox("est deja dans la liste")
                                    Else
     
     
     
                                        Dim str As String() = New String(2) {}
                                            str(0) = legume
                                            str(1) = couleur
                                            Dim lvi As New ListViewItem(str)
                                            article.Items.Add(lvi)
                                        End If
    Comment je peux faire pour modifier la quantité dans la bonne colonne si doublon (legume + couleur )

  6. #6
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 422
    Points : 2 181
    Points
    2 181
    Par défaut
    bonsoir,
    j'ai suivi ce poste depuis le début et je ne comprend toujours rien!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Dim intWidth As Integer = ListView1.Width - 5
            ListView1.Columns.Add("designation", CInt(intWidth / 2))
            ListView1.Columns.Add("couleur", CInt(intWidth / 2))
     
     
            Dim Ds As DataTable = OpenFtxt(MyRep, $"Select Distinct designation,couleur From [{MyFichier}]", Shema, True)
            For Each R As DataRow In Ds.Rows
                Dim objItem As ListViewItem = ListView1.Items.Add(R("designation").ToString.Trim)
                objItem.SubItems.Add(R("couleur").ToString.Trim)
            Next
    bien évidement tu peux ajouter un close where pour filtrer la requête OpenFtxt!

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2021
    Messages : 117
    Points : 37
    Points
    37
    Par défaut
    Merci thumb down

    Au début tu crées des colonnes et après tu ajoutes des lignes mais je ne vois pas le traitement si on a la designation et couleur identique alors on incremente la quantité +1

    Sur mon code j'arrive a ne pas afficher les doublons mais pas a modifier la quantité( elle s'affiche sur une ligne du dessous )

    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
     
            Dim monStreamReader As New StreamReader("T:\\test.txt") 'Stream pour la lecture
            Dim legume, couleur, ligne As String
            Do
                ligne = monStreamReader.ReadLine
                legume= ligne.Split(";")(3)
                couleur = ligne.Split(";")(4)
     
                            If article.Items.Count = 0 Then
     
                                Dim str As String() = New String(2) {}
                                str(0) = legume
                                str(1) = couleur
                                Dim lvi As New ListViewItem(str)
                                article.Items.Add(lvi)
     
                            Else
     
                                With article
     
                                    Dim itm As ListViewItem
                                    itm = .FindItemWithText(legume, True, 0, True)
                                    Dim itm1 As ListViewItem
                                    itm1 = .FindItemWithText(couleur, True, 0, True)
     
                                    If Not itm Is Nothing And Not itm1 Is Nothing Then
                                        MsgBox("est deja dans la liste")
     
                                        Dim str As String() = New String(2) {}
                                        str(2) = +1
                                        Dim lvi As New ListViewItem(str)
                                        article.Items.Add(lvi)
     
                                    Else
                                        Dim str As String() = New String(2) {}
                                        str(0) = legume
                                        str(1) = couleur
                                        Dim lvi As New ListViewItem(str)
                                        article.Items.Add(lvi)
                                    End If
     
     
                                End With

  8. #8
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 422
    Points : 2 181
    Points
    2 181
    Par défaut
    Bonjour,
    voila pour la QTS!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     'Add the column headers.
            Dim intWidth As Integer = ListView1.Width - 5
            ListView1.Columns.Add("designation", CInt(intWidth / 3))
            ListView1.Columns.Add("couleur", CInt(intWidth / 3))
            ListView1.Columns.Add("QTS", CInt(intWidth / 3))
     
            Dim Ds As DataTable = OpenFtxt(MyRep, $"Select  designation,couleur,count(couleur) as QTS From [{MyFichier}] Group By designation,couleur", Shema, True)
            For Each R As DataRow In Ds.Rows
                Dim objItem As ListViewItem = ListView1.Items.Add(R("designation").ToString.Trim)
                objItem.SubItems.Add(R("couleur").ToString.Trim)
                objItem.SubItems.Add(R("QTS").ToString.Trim)
            Next
    Apprendre le SQL

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2021
    Messages : 117
    Points : 37
    Points
    37
    Par défaut
    Peux tu m'en dire un peu plus sur ce code je voudrais pas l'écrire bêtement et meme la lecture du fichier (c'est un peu hard quand meme )
    Le fichier txt est sous cette forme en simplifiant.
    pomme;rouge
    poire;jaune
    pomme;rouge
    pomme;verte
    pomme;rouge
    banane;jaune

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For Each R As DataRow In Ds.Rows
                Dim objItem As ListViewItem = ListView1.Items.Add(R("designation").ToString.Trim)
                objItem.SubItems.Add(R("couleur").ToString.Trim)
                objItem.SubItems.Add(R("QTS").ToString.Trim)
            Next
    J'ai un message erreur System.NotImplementedException*: 'The method or operation is not implemented.' ça bloque a l'openftxt

  10. #10
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 422
    Points : 2 181
    Points
    2 181
    Par défaut
    rappel toi on la abordé sur ce fils https://www.developpez.net/forums/d2.../#post11808266

    il est beaucoup plus facile d'aborder les ficher texte comme une table d'une base de données que comme un fichier texte!

    ce genre de code ne s'invente pas il faut trouver sur internet quelqu'un qui le connais, fort heurusement il existe des tuto!

    Code CQFD : 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
     ''' <summary>
        ''' Permet de recupérer sou forme d'un Datatable le contenue d'un fichier texte
        ''' </summary>
        ''' <param name="folder">Répertoire ou ce trouve le ficher texte</param>
        ''' <param name="SQL">Requête de séléction à retourner sous forme de Datatable</param>
        ''' <param name="Shemat">permet de définire la structure du fichier</param>
        ''' <param name="Titre">Booléan qui détermine si la première ligne du fichier est l'entête de colonnes ou une donnée</param> 
        ''' <returns>retourn dune Datatable</returns>
        Private Function OpenFtxt(folder As String, SQL As String, Shemat As String, Titre As Boolean) As DataTable
            '************************************************************************
            'on implémante le fichier schema.ini qui défini la structure du  ou les fichiers texte
            Dim objWriter As New System.IO.StreamWriter($"{folder}\schema.ini", False)
            objWriter.WriteLine(Shemat)
            objWriter.Close()
            '**************************************************************************
            'on défini la connection au répertoire pour le voir comme une base de données!
            Dim con As String = $"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={folder};Extended Properties='text;HDR={If(Titre, "Yes", "No")};FMT=Delimited';"
            '*****************************************************************************
            Dim dt As New DataTable 'on déclare le datatable qui va contenire le résulta de la requête
            'on execute la requêteet on retourne le datatable
            Using Adp As New OleDbDataAdapter(SQL, con)
                Try
                    Adp.Fill(dt)
                    Return dt 'on retourne le datatable!
                Catch ex As Exception
                    Return Nothing
                End Try
     
     
            End Using
            '*****************************************************************************
        End Function

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Imports System.Data.OleDb
    Public Class Form1
        Const MyRep As String = "C:\Myrep\Fruits" 'on défini le répertoire qui deviendra la base de données
        Const MyFichier = "reference.txt" 'on défini la table de la base de données
        Dim Shema As String = $"[{MyFichier}]
                Format= Delimited(;)" 'on donnes les information de la structure du fichier nom et déléimiteur!



    Nom : Sans titre.png
Affichages : 513
Taille : 138,0 Ko

  11. #11
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    @thumb down : ne t offusque pas mais à mon sens tu ne fais qu apporter de la complexité à sa problématique.... le but étant d'accompagner trucss dans son raisonnement et non de l'amener à la reconstruction de son projet, voir d apprehender d autres notions et pas des moindres..... ce qui semble facile pour certain ne l est pas forcément pour d autres

    @trucss : C est toujours intéressant et très enrichissant de connaitre d autres facons de faire mais il ne faut pas courir plusieurs lièvres a la fois. La manipulation de fichiers plats ou structurés sans avoir recours à du langage de requête me semble adapté pour ton besoin. Le cas contraire il aurait fallu utiliser une vraie db avec de vraies requêtes. La question que tu peux te poser des a présent c est : faut il repenser entièrement ton projet et manipuler tes donnees a partir de requetes ? En definitive le jeu en vaut il la chandelle ?
    Il ne faut pas s'éparpiller et je crois ne pas être le seul a te l avoir dis.😉😉

    Je reviendrais + tard sur tes erreurs dans ton dernier code car a première vu tu as un pb de typage.... :
    str(2) = +1
    Tu ne modifies pas l incrementation de l item présent dans ta listview mais a la place tu crées un nouveau listviewitem.....
    Il faut modifier itm.

    Tu as mal appréhendé le fonctionnement du listviewitem (les subitems) et l association avec ton string array ....:
    Pour info itm.text (ou itm.subitems(0).text) correspond au nom du legume et itm.subitems(1).text correspond a sa couleur.
    Et etant donné que str contient 3 elements (= la dimension de ton tableau de String, voir nombre de colonnes dans ton listview) alors itm.subitems(3).text contient l incrément (= quantité).
    Donc itm1 ne sert absolument a rien....

    et j en passe......

    A+ tard.

  12. #12
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 422
    Points : 2 181
    Points
    2 181
    Par défaut
    bonsoir wallace1,
    toute critique est constructive et s'en offusquer serait une véritable bêtise!

    ce qui compte c'est la satisfaction du demandeur les êtas d'âme des intervenant n'ont pas beaucoup d'intérêt!

    je voulais lui fournir une méthode clé en main qui lui permet de lire n'importe quel fichier textes!

    je me suis rendu compte par la suite qu'il avait un projets déjà évolué qui malheureusement explose chez moi! ,

    https://www.developpez.net/forums/d2.../#post11795457,

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2021
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2021
    Messages : 117
    Points : 37
    Points
    37
    Par défaut
    Effectivement comme dit wallace1 je cherche d'abord une solution avec le programme que j'ai fait afin de comprend.
    Apres effectivement me perfectionner avec le code de Thumb down c'est intéressant, mais je débute <1mois.
    Je garde toujours a l'esprit que vos critiques me permettent d'évoluer

  14. #14
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    Pour ma part, je ne comprends pas pourquoi tu t'obstines à vouloir tout faire directement sur le ListView.
    Cela te compliques la vie en plus de compliquer la lecture du code.

    FindItemWithText sur légume va te trouver le premier légume correspondant
    FindItemWithText sur couleur va te trouver la première couleur correspondante mais pas forcément sur le bon légume.
    En plus ce t'obliges à parcourir tes items à chaque enregistrement trouvé.

    Alors que, tu pourrais créer une collection de fruit et la grouper comme tu veux avec une requête Linq.
    Et une fois tes données ordonnées comme tu veux, les insérer dans le ListView

  15. #15
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour
    Comme dit par popo , le traitement que cherches à faire subir à taon fichier texte ,n'as rien à voir avec le listview qui sert juste à l'affichage.
    Ensuite il faut manier correctement le Listview .

    1/ propriete items du lv : represente les "lignes" du lv ou ListViewItem
    Identifie par le nom du 1er element(fruit ,un string) ,le nom du fruit juteux.
    chaque ligne est un ListViewItem
    2/ proprietes subitems du ListViewItem : represente chaque element de chaque "ligne" ou ListViewItem , identifie par le nom des elements suivants(couleur,quantite ,etc ...de type string).

    Ton traitement consiste en 3 etapes et List(of T) est ton plus grand ami.

    1/ lire le fichier et remplir le List(of T)
    2/ traitement du list(of T) : on utilise un autre List(of T) dit liste de Travail ,ou le resultat du traitement est "storé" ,stocké.
    3/ liberation de la memoire ( List (of T) => nothing) et on remplit le ListView avec la liste de travail

    Pour des raisons d'illustration le code .vb ci-aprés contient 2 listviews
    - le premier affiche tel quel le fichier texte lu
    - le deuxieme affiche le resultat apres traitement c.a.d la liste de travail
    - le fichier texte est en piece jointe
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    Imports System.IO
     
    Public Class Form2
        Dim pathFile As String = Directory.GetCurrentDirectory() + "\textfile1.txt"
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ListView2.View = View.Details
            FillListViews()
        End Sub
        Private Sub FillListViews()
            Dim Lines() As String = File.ReadAllLines(pathFile)
            Dim line As String
            Dim List As New List(Of String)
            Dim fruit As String = Nothing
            Dim couleur As String = Nothing
            Dim strQuantite As String = Nothing
     
            For j As Integer = 0 To Lines.Length - 1
                line = Lines(j)
                Dim subList As New List(Of String)
                If Not String.IsNullOrWhiteSpace(line) Then
                    Dim arrStr() As String = line.Split(";")
                    fruit = arrStr(0) : couleur = arrStr(1) : strQuantite = "1"
                    List.Add(fruit)
                    List.Add(couleur)
                    List.Add(strQuantite)
                End If
            Next
            FillListViewSimple(List) 'listview1
     
     
            'traitemebt des fruits doublons Fruit de meme couleur
            'et cumul  des quantites des fruits doublons dans
            'liste de travail
     
     
            Dim TempList As New List(Of String) 'liste de  travail
     
            For j As Integer = 0 To List.Count - 1 Step 3
                fruit = List(j)
                couleur = List(j + 1)
                strQuantite = List(j + 2)
     
                If Not TempList.Contains(fruit) Then 'Fruit et Couleur inexistants.AJOUT
                    TempList.Add(fruit)
                    TempList.Add(couleur)
                    TempList.Add(strQuantite)
                ElseIf TempList.Contains(fruit) And Not TempList.Contains(couleur) Then
                    'Fruit existant et Couleur inexistant.AJOUT
                    TempList.Add(fruit) : TempList.Add(couleur) : TempList.Add(strQuantite)
                ElseIf TempList.Contains(fruit) And TempList.Contains(couleur) Then
                    'Fruit & Couleur  existants.MAJ Quantites
                    Dim indexFruit As Integer = TempList.IndexOf(fruit) 'retrouve index de fruit 
                    indexFruit += 2 '
                    strQuantite = TempList(indexFruit)
                    Dim qty As Integer = Convert.ToInt32(strQuantite)
                    qty += 1 'cumul
                    strQuantite = qty.ToString
                    TempList(indexFruit) = strQuantite
     
                End If
            Next
            'libere  la memoire
            List = Nothing
     
     
            ' Fill du ListView2
            FillListViewTraite(TempList) 'listeview2
     
        End Sub
        Private Sub FillListViewSimple(ByVal maListe As List(Of String)) 'listview1
            Dim fruit As String = Nothing
            Dim couleur As String = Nothing
            Dim strQuantite As String = Nothing
            For j As Integer = 0 To maListe.Count - 1 Step 3
                fruit = maListe(j) : couleur = maListe(j + 1) : strQuantite = maListe(j + 2)
                Dim lvItem As New ListViewItem(fruit)
                lvItem.SubItems.Add(couleur)
                lvItem.SubItems.Add(strQuantite)
                ListView1.Items.Add(lvItem)
            Next
            ListView1.Columns.Add("Fruit", 100, HorizontalAlignment.Left)
            ListView1.Columns.Add("Couleur", 100, HorizontalAlignment.Left)
            ListView1.Columns.Add("Quantite", 100, HorizontalAlignment.Left)
     
     
        End Sub
        Private Sub FillListViewTraite(ByVal monTempListe As List(Of String)) 'listview2
            Dim fruit As String = Nothing
            Dim couleur As String = Nothing
            Dim strQuantite As String = Nothing
            For j As Integer = 0 To monTempListe.Count - 1 Step 3
                fruit = monTempListe(j) : couleur = monTempListe(j + 1) : strQuantite = monTempListe(j + 2)
                Dim lvItem As New ListViewItem(fruit)
                lvItem.SubItems.Add(couleur)
                lvItem.SubItems.Add(strQuantite)
     
                ListView2.Items.Add(lvItem)
            Next
     
            ListView2.Columns.Add("Fruit", 100, HorizontalAlignment.Left)
            ListView2.Columns.Add("Couleur", 100, HorizontalAlignment.Left)
            ListView2.Columns.Add("Quantite", 100, HorizontalAlignment.Left)
     
        End Sub
    End Class
    bon code ....
    Fichiers attachés Fichiers attachés

  16. #16
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 674
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 674
    Points : 5 259
    Points
    5 259
    Par défaut
    MABROUKI, tout ça m'a l'air bien compliqué.
    Comme je l'ai déjà mentionné, une simple requête Linq fait le job.

    Si je pars du principe que les données sont toujours dans un fichier CSV comme indiqué dans le post suivant :
    https://www.developpez.net/forums/d2...tir-d-fichier/

    Et avec le jeu de données suivant :
    reference;designation;couleur;conditionnement;code-barre
    12568;abricot;U;Unite;12568U;;
    26037;pomme;J;carton;26037J;;
    26037;pomme;R;carton;26037R;;
    26444;ananas;B;unite;26444B;;
    12568;abricot;U;Unite;12568U;;
    12568;abricot;U;Unite;12568U;;
    12568;abricot;U;Unite;12568U;;

    Créer une classe Fruit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Class Fruit
        Public Property Nom As String
        Public Property Couleur As String
    End Class
    Puis
    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
     
            'Lecture du fichier en ignorant la ligne d'en-tête
            Dim fruits_fichier = File.ReadAllLines("fruits.csv").Skip(1).ToList()
     
            'Récupération des informations du fichiers
            Dim fruits_list_origin = New List(Of Fruit)
            For Each item In fruits_fichier
                Dim parts = item.Split(New Char() {";"}, StringSplitOptions.RemoveEmptyEntries)
     
                fruits_list_origin.Add(New Fruit With {
                .Nom = parts(1),
                .Couleur = parts(2)
            })
            Next
     
            'Regroupement et comptage des fruits
            Dim fruits_group = fruits_list_origin _
                .GroupBy(Function(fruit) New With {Key fruit.Nom, Key fruit.Couleur}) _
                .Select(Function(groupe) New With {.Nom = groupe.Key.Nom, .Couleur = groupe.Key.Couleur, .Nombre = groupe.Count()})
     
            'Affichage des fruits groupés et comptés
            'A remplacer par l'insertion de ListViewItem
            For Each fruit In fruits_group
                MessageBox.Show($"{fruit.Nom}, {fruit.Couleur}, {fruit.Nombre}")
            Next
    Le premier message affiche "abricot, U, 4"

  17. #17
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    Citation Envoyé par popo Voir le message
    MABROUKI, tout ça m'a l'air bien compliqué......
    Je suis d'accord .
    Mais je n'etais pas sur que mr trucs maitrise la POO et l'api .Net LINQ ,c'est pour cela que j'ai donéune solution basique à base L(of T).
    Un array multidimensionel aussi.

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

Discussions similaires

  1. effacer des items dans une listview
    Par pascb423 dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/11/2018, 18h03
  2. Suppression d'item dans une ListView via des CheckBox (Type boite mail)
    Par Berlo56 dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 27/03/2014, 09h40
  3. Supprimer des items dans une LISTVIEW
    Par thisisonehood dans le forum VB.NET
    Réponses: 7
    Dernier message: 05/06/2012, 14h46
  4. Regrouper des colonnes dans une ligne
    Par aturlan dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2006, 21h05
  5. [Portal 9iAS] : ordre des items dans une région
    Par melitta dans le forum Oracle
    Réponses: 8
    Dernier message: 21/10/2004, 14h01

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