Modifier la quantité si article et couleur identique

Résolu
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 - Modifié le 22 févr. 2022 à 17:48
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 - 22 févr. 2022 à 14:46
Bonjour,
J'ai un fichier .TXT j'arrive a le lire je l'écris dans une listview (tableau)composée de 3 colonnes article, couleur, quantité.
Si on a le même article et couleur alors on fait +1 à la quantité sinon on le rajoute au tableau.
Avec ce code quand je veux modifier la quantité si article et couleur identique ça me le rajoute sur la ligne du dessous qui est vide ( pas d'article ni couleur)

 Dim monStreamReader As New StreamReader("T:\test.TXT") 'Stream pour la lecture
 Dim article,, couleur, ligne As String
 Do
      ligne = monStreamReader.ReadLine
      If ligne <> "" Then
             article= ligne.Split(";")(3)
             couleur = ligne.Split(";")(4)
             If tableau.Items.Count = 0 Then
                      Dim str As String() = New String(2) {}
                      str(0) = article
                      str(1) = couleur
                      str(2) = +1
                      Dim lvi As New ListViewItem(str)
                      tableau.Items.Add(lvi)
             Else
                      With tableau
                               Dim itm As ListViewItem
                               itm = .FindItemWithText(ref, 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)
                                     tableau.Items.Add(lvi)
                                Else
                                     Dim str As String() = New String(2) {}
                                     str(0) = article
                                     str(1) = couleur
                                     str(2) = +1
                                     Dim lvi As New ListViewItem(str)
                                     tableau.Items.Add(lvi)
                                End If
                      End With
             End If
      End If
Loop Until ligne Is Nothing
monStreamReader.Close()

68 réponses

Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
17 févr. 2022 à 16:56
Bonjour

Pour poster un code merci d’utiliser les balises de codes, voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à t’aider quand tu auras reposté ton code.
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
Modifié le 17 févr. 2022 à 17:02
bonjour,
Effectivement je cherche la chartre du forum j'arrive plus a modifier mon texte en haut afin de respecter la forme
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
Modifié le 1 mars 2022 à 14:46
Dim monStreamReader As New StreamReader("T:\test.TXT") 'Stream pour la lecture
Dim article, couleur, ligne As String
Do
    ligne = monStreamReader.ReadLine
    If ligne <> "" Then
        article= ligne.Split(";")(3)
        couleur = ligne.Split(";")(4)
        If tableau.Items.Count = 0 Then
            Dim str As String() = New String(2) {}
            str(0) = article
            str(1) = couleur
            str(2) = +1
            Dim lvi As New ListViewItem(str)
            tableau.Items.Add(lvi)
        Else
            With tableau
                Dim itm As ListViewItem
                itm = .FindItemWithText(ref, 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)
                    tableau.Items.Add(lvi)
                Else
                   Dim str As String() = New String(2) {}
                   str(0) = article
                   str(1) = couleur
                   str(2) = +1
                   Dim lvi As New ListViewItem(str)
                   tableau.Items.Add(lvi)
                End If
            End With
        End If
    End If
Loop Until ligne Is Nothing
monStreamReader.Close()
0
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
17 févr. 2022 à 17:19
Merci, mais tu as copié / collé le code posté au dessus et pas celui de ton IDE, donc y'a plus d'indentation, mais c'est déjà beaucoup plus lisible.

Bon avant tout, je ne peux que te conseiller vivement 2 choses
  • dans les références supprimer celle qui s'appelle "Visual Basic", là dans ton code y'a du VB6 et du VB.Net, sans cette référence, le VB6 ne sera plus accepté et donc tu pourras vraiment progresser en .Net.
  • prendre quelques jours pour lire ce cours en ligne, https://tahe.developpez.com/dotnet/vbnet/ afin d'apprendre les bases de Vb.Net et notamment l'objet qui est l'essence de .Net contrairement à VB6


Je vais te préparer un exemple de code utilisant l'objet et qui je crois répondra à ton besoin
0
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
17 févr. 2022 à 17:28
Ha oui j'ai oublié de préciser, que .Net a été pensé pour que les controles ne "servent quasiment qu'à l'affichage".
Le traitement des données devant donc être réalisé sur des collections de données.
1
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
17 févr. 2022 à 19:06
Tout d'abord, j'ai écrit ce fichier texte en fonction de ce que j'ai vu dans ton code
Colonne 0;Colonne 1;Colonne 2;Article;Couleur
blabla;blublu;bleble;Article1;Rouge
blabla;blublu;bleble;Article2;Rouge
blabla;blublu;bleble;Article3;Rouge
blabla;blublu;bleble;Article1;Bleu
blabla;blublu;bleble;Article2;Bleu
blabla;blublu;bleble;Article3;Bleu
blabla;blublu;bleble;Article1;Vert
blabla;blublu;bleble;Article2;Vert
blabla;blublu;bleble;Article3;Vert
blabla;blublu;bleble;Article1;Rouge
blabla;blublu;bleble;Article2;Bleu
blabla;blublu;bleble;Article3;Vert


Ensuite j'ai écrit 2 classes
''' <summary>
''' Classe représentant tes données
''' </summary>
Class DataTrucss

    ''' <summary>
    ''' Un constructeur qui prend une ligne issue du CSV comme paramètre d'entrée
    ''' </summary>
    ''' <param name="LigneCsv"></param>
    Public Sub New(ByVal LigneCsv As String)
        Dim l As String() = LigneCsv.Split(";"c)
        Article = l(3)
        Couleur = l(4)
    End Sub

    'les propriétés sont les données utiles de chaque ligne

    Public Property Article As String

    Public Property Couleur As String

    ''' <summary>
    ''' Surcharge de ToString pour afficher un résumé parlant de l'instance, et qui va servir au tri
    ''' </summary>
    ''' <returns></returns>
    Public Overrides Function ToString As String
        Return $"{Article}, {Couleur}"
    End Function
End Class

''' <summary>
''' Classe qui représente ce que tu veux voir afficher
''' </summary>
Class DatasTriees
    Public Sub New(ByVal Combinaison As DataTrucss, ByVal LaQuantite As Integer)
        Donnee = Combinaison
        Quantite = LaQuantite
    End Sub

    '1 combinaison Article / Couleur
    Public Property Donnee As DataTrucss

    'la quantité de cette combinaison
    Public Property Quantite As Integer

    ''' <summary>
    ''' Surcharge de ToString pour afficher un résumé parlant de l'instance
    ''' </summary>
    ''' <returns></returns>
    Public Overrides Function ToString As String
        Return $"{Donnee.Article}, {Donnee.Couleur} x{Quantite}"
    End Function
End Class



Et le code qui va lire le fichier pour en faire une collection de DatasTriees
        'on va lire le fichier d'un coup avec la classe File et en faire un tableau dont chaque ligne est une entrée
        Dim lignes As String() = File.ReadAllLines("trucss.csv")

        'on va créer une List de DataTrucss et la remplir
        'j 'ai mis une ligne d'entête, pour l'exclure j'utilise skip
        Dim datas As List(Of DataTrucss) = New List(Of DataTrucss)

        For Each l In lignes.Skip(1)
            datas.Add(New DataTrucss(l))
        Next

        'on va utiliser une requette Linq qui permet de regrouper les données par article et par couleur
       Dim regroupement = datas.GroupBy(Fonction(x) x.ToString)

        'on va enfin créer la liste résultat (même si en fait le regroupement pourrait suffire), en prenant le premier item de chaque groupe et le nombre d'items
        Dim donneeTriees As List(Of DatasTriees)  = New List(Of DatasTriees)

        For Each groupe In regroupement
            donneeTriees.Add(New DatasTriees(groupe.First(), groupe.Count))
        Next



Tu peux ensuite alimenter ta listview avec la collection de DatasTriees


Note que Linq est tellement puissant qu'on aurait pu lire le fichier, lister les données "brutes" et les trier dans une seule requête. Mais elle aurait probablement difficile à comprendre à ce stade de ta formation.

ATTENTION suite à un bug en cours sur le site, j'ai du modifier un peu le code source et par conséquent, tu vas avoir quelques erreurs identifiées.
  • partout où il y a ToString il te faudra ajouter ()
  • dans le mot clé Fonction, il te faudra remplacer le o par un u
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
Modifié le 17 févr. 2022 à 22:00
Merci pour ta réponse qui est assez compliqué pour moi
Pour le code des 2 classes c’est à écrire dans module 1 ?
Désolé mais je vois pas comment alimenter ma listview de 3 colonnes car j ai jamais utiliser les datastriees.
C,est pas gênant si dans le fichier .txt j,ai pas la première ligne mentionné colonne 0….
C’est juste pour l’exemple je suppose ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
17 févr. 2022 à 22:35
Merci pour ta réponse qui est assez compliqué pour moi
c'est pour cela que je t'ai conseiller de commencer par le cours de Tahé. Ce sera plus clair après.

Pour le code des 2 classes c’est à écrire dans module 1 ?
non dans des fichiers de classe. En ajoutant un élément au projet tu peux choisir ce type de fichier. Tu verras plus tard que les Form et les controles sont des class particulières.

C,est pas gênant si dans le fichier .txt j,ai pas la première ligne mentionné colonne 0….
, non il suffit d'enlever la requête Linq Skip(1)

C’est juste pour l’exemple je suppose ?
oui et au cas où je n'avais pas bien interprété la structure que tu puisses t'y retrouver.

Désolé mais je vois pas comment alimenter ma listview de 3 colonnes
je compléterai l'exemple demain.

car j ai jamais utiliser les datastriees.
et personne d'autre d'ailleurs, j'ai écrit cette class exprès pour ton besoin. C'est ça tout le sens de l'objet.
Dans la vraie vie, si tu veux faire chauffer de l'eau, tu te sers d'un (ou plusieurs) objet fabriqué pour
  • une bouilloire
  • une casserole
  • un micro onde
  • etc..

En programmation, il faut virtualiser un outil qui répond à un besoin.


0
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
18 févr. 2022 à 08:55
Bonjour
 
       'peuplement de la listview à partir de la collection de données triées
        For Each d In donneeTriees
            ListView1.Items.Add(New ListViewItem({d.Donnee.Article, d.Donnee.Couleur, d.Quantite.ToString()}))
        Next



Mais dans les commentaires, je t'ai dit que dans l'absolue, le passage par cette classe n'est pas nécessaire.
Je te montre donc le code directement à partir du regroupement
        'peuplement de la listview à partir du regroupement
        For Each groupe In regroupement
            ListView1.Items.Add(New ListViewItem({groupe.First().Article, groupe.First().Couleur, groupe.Count.ToString()}))
        Next

Et dans ce cas, la class DatasTriees ne sert plus à rien.
En fait je l'ai écrite pour détailler le cheminement.

D'une façon ou de l'autre le résultat est

0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
18 févr. 2022 à 09:18
Merci pour ton travail whismeri. Je commence un peu a comprendre la logique sur certain element.
Si je detaille j'ai placer se code dans mon action d'un bouton par exemple a l'ouverture du fichier il va cree un tableau virtuel avec les donnees du fichiers.
ignes.Skip(1) = C'est pour ne pas tenir compte de la premiere ligne
ensuite on va regrouper les donnees articles et couleur
Puis on remplie la listview(list)
C'est ça le principe ?


Imports System.IO

Public Class Form1

    Private Sub ok_Click(sender As Object, e As EventArgs) Handles ok.Click
        'on va lire le fichier d'un coup avec la classe File et en faire un tableau dont chaque ligne est une entrée
        Dim lignes As String() = File.ReadAllLines("T:\\test.TXT")

        'on va créer une List de DataTrucss et la remplir
        'j 'ai mis une ligne d'entête, pour l'exclure j'utilise skip
        Dim datas As List(Of DataTrucss) = New List(Of DataTrucss)

        For Each l In lignes.Skip(1)
            datas.Add(New DataTrucss(l))
        Next

        'on va utiliser une requette Linq qui permet de regrouper les données par article et par couleur
        Dim regroupement = datas.GroupBy(Fonction(x) x.ToString)

        'on va enfin créer la liste résultat (même si en fait le regroupement pourrait suffire), en prenant le premier item de chaque groupe et le nombre d'items
        Dim donneeTriees As List(Of DatasTriees) = New List(Of DatasTriees)

        'peuplement de la listview à partir du regroupement
        For Each groupe In regroupement
            list.Items.Add(New ListViewItem({groupe.First().Article, groupe.First().Couleur, groupe.Count.ToString()}))
        Next

        For Each d In donneeTriees
            list.Items.Add(New ListViewItem({d.Donnee.Article, d.Donnee.Couleur, d.Quantite.ToString()}))
        Next
    End Sub
End Class
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
Modifié le 18 févr. 2022 à 09:26
Merci pour ton travail whismeri. Je commence un peu a comprendre la logique sur certain élément.
Si je détaille j'ai placé ce code dans mon action d'un bouton par exemple a l'ouverture du fichier il va crée un tableau virtuel avec les données du fichiers.
ignes.Skip(1) = C'est pour ne pas tenir compte de la première ligne donc je le supprime.
J'ai pas besoin de crée des class si oui pourquoi ?
ensuite on va regrouper les données articles et couleur
Puis on remplie la listview(list)
C'est ça le principe ?


Imports System.IO

Public Class Form1

    Private Sub ok_Click(sender As Object, e As EventArgs) Handles ok.Click
        'on va lire le fichier d'un coup avec la classe File et en faire un tableau dont chaque ligne est une entrée
        Dim lignes As String() = File.ReadAllLines("T:\\test.TXT")

        'on va créer une List de DataTrucss et la remplir
        'j 'ai mis une ligne d'entête, pour l'exclure j'utilise skip
        Dim datas As List(Of DataTrucss) = New List(Of DataTrucss)

        'For Each l In lignes.Skip(1)
          '  datas.Add(New DataTrucss(l))
       ' Next

        'on va utiliser une requette Linq qui permet de regrouper les données par article et par couleur
        Dim regroupement = datas.GroupBy(Fonction(x) x.ToString)

        'on va enfin créer la liste résultat (même si en fait le regroupement pourrait suffire), en prenant le premier item de chaque groupe et le nombre d'items
        Dim donneeTriees As List(Of DatasTriees) = New List(Of DatasTriees)

        'peuplement de la listview à partir du regroupement
        For Each groupe In regroupement
            list.Items.Add(New ListViewItem({groupe.First().Article, groupe.First().Couleur, groupe.Count.ToString()}))
        Next

        For Each d In donneeTriees
            list.Items.Add(New ListViewItem({d.Donnee.Article, d.Donnee.Couleur, d.Quantite.ToString()}))
        Next
    End Sub
End Class





J'ai un problème dans ça Dim regroupement = datas.GroupBy(Fonction(x) x.ToString)
0
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
18 févr. 2022 à 09:26
Alors oui mais
C'est
        'peuplement de la listview à partir du regroupement
        For Each groupe In regroupement
            list.Items.Add(New ListViewItem({groupe.First().Article, groupe.First().Couleur, groupe.Count.ToString()}))
        Next


OU (un ou exclusif)
        For Each d In donneeTriees
            list.Items.Add(New ListViewItem({d.Donnee.Article, d.Donnee.Couleur, d.Quantite.ToString()}))
        Next


Ça ne doit pas planter chez toi car la liste donneeTriees est vide, mais ces 3 lignes ne servent à rien à partir du moment où tu peuples directement avec le regroupement. Et d'ailleurs, ces 2 là non plus
        'on va enfin créer la liste résultat (même si en fait le regroupement pourrait suffire), en prenant le premier item de chaque groupe et le nombre d'items
        Dim donneeTriees As List(Of DatasTriees) = New List(Of DatasTriees)

0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
18 févr. 2022 à 09:36
Mais je ne comprend pas comment on l'ajoute a la listview alors


Imports System.IO

Public Class Form1


    Private Sub ok_Click(sender As Object, e As EventArgs) Handles ok.Click
        'on va lire le fichier d'un coup avec la classe File et en faire un tableau dont chaque ligne est une entrée
        Dim lignes As String() = File.ReadAllLines("T:\test1.txt")

        'on va créer une List de DataTrucss et la remplir
        'j 'ai mis une ligne d'entête, pour l'exclure j'utilise skip
        Dim datas As List(Of DataTrucss) = New List(Of DataTrucss)

    
        Next
0
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
Modifié le 18 févr. 2022 à 10:08
Finalement j’ai voulu détailler pour que ce soit plus clair et ça t’embrouille, raté…

        'on va lire le fichier d'un coup avec la classe File et en faire un tableau dont chaque ligne est une entrée
        Dim lignes As String() = File.ReadAllLines("T:\\test.TXT")

        'on va créer une List de DataTrucss et la remplir
        'j 'ai mis une ligne d'entête, pour l'exclure j'utilise skip
        Dim datas As List(Of DataTrucss) = New List(Of DataTrucss)

        For Each l In lignes.Skip(1)
           datas.Add(New DataTrucss(l))
       Next

        'on va utiliser une requette Linq qui permet de regrouper les données par article et par couleur
        Dim regroupement = datas.GroupBy(Fonction(x) x.ToString)

        'peuplement de la listview à partir du regroupement
        For Each groupe In regroupement
            list.Items.Add(New ListViewItem({groupe.First().Article, groupe.First().Couleur, groupe.Count.ToString()}))
        Next 



Pas besoin de plus
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
18 févr. 2022 à 13:37
Super ça fonctionne merci
Je suis partie sur un fichier simple mais en fait il faut récupérer les articles qui on le mot verif en (2) sinon le reste on prend pas et dans une textbox1 renseigne un prix en (6 dans le fichier) recupére < au prix (textbox)
Merci pour tout
0
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
Modifié le 18 févr. 2022 à 16:42
Avec ce nouveau fichier
Colonne 0;Colonne 1;Verif;Article;Couleur;Colonne 5;Prix
blabla;blublu;Non;Article1;Rouge;blevle;12
blabla;blublu;Oui;Article2;Rouge;blevle;11
blabla;blublu;Non;Article3;Rouge;blevle;10
blabla;blublu;Oui;Article1;Bleu;blevle;9
blabla;blublu;Non;Article2;Bleu;blevle;8
blabla;blublu;Oui;Article3;Bleu;blevle;12
blabla;blublu;Non;Article1;Vert;blevle;11
blabla;blublu;Oui;Article2;Vert;blevle;10
blabla;blublu;Non;Article3;Vert;blevle;9
blabla;blublu;Oui;Article1;Rouge;blevle;8
blabla;blublu;Non;Article2;Bleu;blevle;12
blabla;blublu;Oui;Article3;Vert;blevle;11
blabla;blublu;Non;Article1;Rouge;blevle;10
blabla;blublu;Oui;Article2;Rouge;blevle;9
blabla;blublu;Non;Article3;Rouge;blevle;8
blabla;blublu;Oui;Article1;Bleu;blevle;12
blabla;blublu;Non;Article2;Bleu;blevle;11
blabla;blublu;Oui;Article3;Bleu;blevle;10
blabla;blublu;Non;Article1;Vert;blevle;9
blabla;blublu;Oui;Article2;Vert;blevle;8
blabla;blublu;Non;Article3;Vert;blevle;12
blabla;blublu;Oui;Article1;Rouge;blevle;11
blabla;blublu;Non;Article2;Bleu;blevle;10
blabla;blublu;Oui;Article3;Vert;blevle;9


La classe DataTrucss est modifiée comme suit
''' <summary>
''' Classe représentant tes données
''' </summary>
Class DataTrucss

    ''' <summary>
    ''' Un constructeur qui prend une ligne issue du CSV comme paramètre d'entrée
    ''' </summary>
    ''' <param name="LigneCsv"></param>
    Public Sub New(ByVal LigneCsv As String)
        Dim l As String() = LigneCsv.Split(";"c)
        Article = l(3)
        Couleur = l(4)
        Prix = Convert.ToDouble(l(6))
        Verif = l(2)
    End Sub

    'les propriétés sont les données utiles de chaque ligne

    Public Property Article As String

    Public Property Couleur As String

    Public Property Prix As Double

    Public Property Verif As String

    ''' <summary>
    ''' Surcharge de ToString pour afficher un résumé parlant de l'instance, et qui va servir au tri
    ''' </summary>
    ''' <returns></returns>
    Public Overrides Function ToString As String
        Return String.Format("{0}, {1}", Article, Couleur)
    End Function
End Class


L'autre classe n'existe plus

0
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
Modifié le 18 févr. 2022 à 16:49
La lecture et l'affichage des données
        'on va lire le fichier d'un coup avec la classe File et en faire un tableau dont chaque ligne est une entrée
        Dim lignes As String() = File.ReadAllLines("trucss.csv")

        'on va créer une List de DataTrucss et la remplir
        'j 'ai mis une ligne d'entête, pour l'exclure j'utilise skip
        Dim datas As List(Of DataTrucss) = New List(Of DataTrucss)

        For Each l In lignes.Skip(1)
            datas.Add(New DataTrucss(l))
        Next

        'on va utiliser une requette Linq qui permet de regrouper les données par article et par couleur
        'si est seulement si verfi vaut "Oui" et le prix est inférieur à 10.5
        Dim regroupement = datas.Where(Function(x) x.Verif = "Oui" And x.Prix < 10.5).GroupBy(Function(x) x.ToString())

        'peuplement de la listview à partir du regroupement
        For Each groupe In regroupement
            ListView1.Items.Add(New ListViewItem({groupe.First().Article, groupe.First().Couleur, groupe.Count.ToString(), groupe.First().Prix.ToString(), groupe.First().Verif}))
        Next




0
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
Modifié le 18 févr. 2022 à 16:53
Attention, la conversion du texte dans le fichier texte en Double peut poser problèmes , notamment avec la virgule.
Mon PC est en point, dans le fichier texte c'est en point, je n'ai pas géré les éventuelles incohérences.

Pour ça, je t'invite à lire cet article https://codes-sources.commentcamarche.net/faq/11316-conversion-de-string-en-nombre-en-net-c-et-vb-net

0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
Modifié le 18 févr. 2022 à 22:46
Bonsoir
Est ce gênant si j'ai un fichier .txt de ce type.
C'est pour ça que je prendre en compte que les lignes qui on le parametre (2) = Non et aprés tout les articles inferieur a un prix.

Merci pour ton aide en modifiant des éléments au fur et a mesure je commence a comprendre le principe.

Si je veux pas le skip car j'ai pas de ligne au début du fichier je dois supprimer ça et j'ai plus d'ajout pour ma listview
For Each l In lignes.Skip(1)
            datas.Add(New DataTrucss(l))
        Next




blabla;blublu;Non;Article1
blabla;blublu;Non
blabla;hfghf;Non
blabla;blublu;Oui;Article1;Bleu;blevle;9
blabla;blublu;Non;Article2;Bleu;blevle;8
blabla;blublu;Oui;Article3;Bleu;blevle;12
blabla;blublu;Non;Article1;Vert;blevle;11
blabla;blublu;Oui;Article2;Vert;blevle;10
blabla;blublu;Non;Article3;Vert;blevle;9
blabla;blublu;Oui;Article1;Rouge;blevle;8
blabla;blublu;Non;Article2;Bleu;blevle;12
blabla;blublu;Oui;Article3;Vert;blevle;11
blabla;blublu;Non;Article1;Rouge;blevle;10
blabla;blublu;Oui;Article2;Rouge;blevle;9
blabla;blublu;Non;Article3;Rouge;blevle;8
blabla;blublu;Oui;Article1;Bleu;blevle;12
blabla;blublu;Non;Article2;Bleu;blevle;11
blabla;blublu;Oui;Article3;Bleu;blevle;10
blabla;blublu;Non;Article1;Vert;blevle;9
blabla;blublu;Oui;Article2;Vert;blevle;8
blabla;blublu;Non;Article3;Vert;blevle;12
blabla;blublu;Oui;Article1;Rouge;blevle;11
blabla;blublu;Non;Article2;Bleu;blevle;10
blabla;blublu;Oui;Article3;Vert;blevle;9



Je comprend pas trop ça :
on prend en compte la chaine avant le ;c ? et on l'index avec l

Dim l As String() = LigneCsv.Split(";"c)
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
18 févr. 2022 à 22:51
oups erreur parametre (2) = Oui
0
dysorthographie Messages postés 92 Date d'inscription jeudi 27 janvier 2022 Statut Membre Dernière intervention 3 avril 2024 5
Modifié le 19 févr. 2022 à 01:58
bonjour,
tu peux retailler ton Array comme suis pour avoir toujours la même taille de tableau!

Dim LigneCsv As String = "blabla;blublu;Oui;Article3;Vert;blevle;9"
 Dim l(6) As String : Array.Copy($"{LigneCsv}{New String(";"c, 6)}".Split(";"c), l, 7)
0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
Modifié le 19 févr. 2022 à 08:01
désolé mais je dois coller c'est lignes dans la classe 1 au tout début ?
0
dysorthographie
19 févr. 2022 à 10:00
Bonjour,
En lieux et place de
Dim l As String() = LigneCsv.Split(";"c)

Ça te permet d'avoir toujours 6 colonnes dans ton tableau et ne pas vérifié sa longueur !
0
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655 > dysorthographie
19 févr. 2022 à 10:40
sauf que si tu fais ça, la colonne du prix sera parfois vide et ça va planter à la conversion en double
0
Whismeril Messages postés 19016 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 13 avril 2024 655
19 févr. 2022 à 08:05
Bonjour

la méthode split découpe une string (chaine de caractère) en fonction d'un caractère de délimitation et retourne un tableau.
Ça
";"
c'est la string ; et ceci
";"c
est le caractère ;

Dim l As String() 
initialise un tableau de string appelé l (comme ligne)

Et donc
Dim l As String() = LigneCsv.Split(";"c)
découpe une ligne du csv en fonction du caractère ; et stocke le résultat dans le tableau l

Ensuite, je t'ai d'it que skip(1) sert à ignorer la première ligne. Skip ça veut dire passer, sauter. Donc Skip(1), ça veut dire, sauter 1 enregistrement.

Pour ne pas ignorer la première ligne, il suffit de supprimer
.Skip(1)
et rien d'autre.


Pour utiliser le fichier que tu as posté au dessus, il y a plusieurs façon de faire.
Pour moi la plus simple (mais elle est conditionnée au faut qu'il y aura au moins la colonne 3) est de modifier le constructeur de la class DataTrucss comme ça
        Dim l As String() = LigneCsv.Split(";"c)

        Verif = l(2)

        If l.Length > 3 Then Article = l(3)

        If l.Length > 4 Then Couleur = l(4)

        If l.Length > 6 Then Prix = Convert.ToDouble(l(6))

0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
Modifié le 19 févr. 2022 à 09:31
Merci
Ah ok tu contrôles le nombre de caractère pas bête merci pour un debutant comme moi parfait merci
0
Rejoignez-nous