Selon condition ecrire dans la colonne 4 suivant fichier

Résolu
trucss
Messages postés
80
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
13 mai 2022
- 13 mai 2022 à 10:07
Whismeril
Messages postés
17335
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
19 mai 2022
- 13 mai 2022 à 17:59
Bonjour,
Avant ce code je renseigne une listviewdata
voir photo


Je dois renseigner la colonne 4:
Avec le code ci dessous si j'ai une valeur colonne 0 (test?) et colonne 2 (op?) je renseigne la colonne 4 avec le fichier CSV pour récupérer la dernière valeur après";"

test1;"op; op1; op2";;16
test2;"op3";;2
test3;"op; op1; op2; op3";;1


Dim monstreamreader As New StreamReader("T:\test.csv")
        Dim ligne As String
        Dim lastpart As String

        For i = 0 To listviewdata.Items.Count - 1

            Do
                ligne = monstreamreader.ReadLine

                If InStr(ligne, listviewdata.Items(i).SubItems(0).Text) > 0 AndAlso InStr(ligne, listviewdata.Items(i).SubItems(2).Text) > 0 Then 
                    lastpart = ligne.Substring(ligne.LastIndexOf(";") + 1) 'garde en memoire le numero 
                End If

            Loop Until ligne Is Nothing

            With listviewdata.Items(i)

                If .SubItems(2).Text <> String.Empty AndAlso .SubItems(0).Text <> String.Empty Then
                    .SubItems(4).Text = lastpart ' écrire dans la quatrième colonne

                End If
            End With
        Next

3 réponses

vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
Modifié le 13 mai 2022 à 15:53
Bonjour
Quel est le souci ?
De plus à un post précédent Whismeril t'a dit qu'utiliser un StreamReader pour lire un simple fichier texte c'est l'artillerie lourde . La méthode ReadAllLines de la classe File ferait très bien l'affaire .
Que veux tu faire exactement avec InStr ( qui en passant est un mot clé VB 6 ) ?
De plus ta ListView ne doit servir qu'à l'affichage des données . Or on voit dans ton code tu t'en sers pour faire des tests sur des valeurs de ces cellules .

0
trucss
Messages postés
80
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
13 mai 2022

Modifié le 13 mai 2022 à 16:44
Oui j'ai pas encore modifié pour le streamreader
Je voudrais vérifier si on a sur la même ligne du fichier a chaque lecture les 2 valeurs qu'on lit colonne 0 et colonne 2 et si oui on va récupérer la dernière valeur de la ligne du fichier et l'écrire colonne 4. Ca me rempli la colonne mais toujours avec la meme valeur sur toute les lignes.
Le InStr je m'en sert pour cherche les mots dans la ligne du fichier
0
trucss
Messages postés
80
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
13 mai 2022
> trucss
Messages postés
80
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
13 mai 2022

13 mai 2022 à 17:03
J'ai l'impression qu'une fois que j'ai lu tout le fichier pour la prochaine lecture ça repart pas du début du fichier
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151
13 mai 2022 à 17:03
Bonjour
Teste ceci
Dim Subitem0, Subitem2 as string ' les 2 éléments de la Listview à retrouver dans le fichier
Dim Lignes as List(of String) = File.ReadAllLines("T:\test.csv"). ToList ' les lignes du fichier
Dim TableStrings() as String ' les éléments splittés d'une ligne du fichier
For i = 0 to listviewdata.Items.Count - 1
    TableStrings = Lignes(i).Split(";") ' les différents élémens d'une ligne du fichier
    With listviewdata.Items(i)
          Subitem0 = .Subitems(0).Text ' colonne 0 de la listview
          Subitem2 = .Subitems(2).Text ' colonne 2  de la listview
          If TableStrings(0) = Subitem0 AndAlso TableStrings(2) = Subitems2 then
               ' si les 2 sont égaux on écrit colonne 4 le dernier élément de la ligne
              .Subitems(4).Text = Lignes(i).Substring(Lignes(i).LastIndexOf(";") + 1)
          End if
   End with
nexr 


Remarque les commentaires que j'ai mis . Ils rendent le code bien plus compréhensible

0
trucss
Messages postés
80
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
13 mai 2022

13 mai 2022 à 17:07
j'ai erreur sur subitem non declaré
0
vb95
Messages postés
2630
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
19 mai 2022
151 > trucss
Messages postés
80
Date d'inscription
jeudi 17 février 2022
Statut
Membre
Dernière intervention
13 mai 2022

Modifié le 13 mai 2022 à 18:08
Bonjour
Au message précédent tu dis avoir une erreur .
Est ce dans le code que je t'ai présenté au message 3 ? Si oui a quelle ligne ?
Autre chose : combien de colonnes a ta Listview ? Exemple : si ta Listview a 5 colonnes elles sont numérotées de 0 à 4 .
De plus le post est mis en résolu : l'erreur a-t-elle été corrigée ?
En plus raisonnons un peu : tu compares 2 colonnes de la listview avec 2 éléments d'une ligne d'un fichier .
Avec quoi est remplie la listview ?
0
Whismeril
Messages postés
17335
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
19 mai 2022
596
13 mai 2022 à 17:59
Bonjour

tu dis que tu as une erreur et en même temps tu as marqué ton sujet résolu.
Donc résolu ou pas?
Si pas, "démarque" le sujet au moins c'est clair.

Si tu nous expliquais le besoin et pas la solution technique que tu envisages.
Parce que, si je comprends bien le code de ton message initial de ce fil, tu commences pas une erreur de conception.
Ta listview semble servir de "base de données" données que tu viens modifier.
Ça ne sert pas à ça, ça sert à afficher les données.
Pour la source de données, il y a des collections d'objets bien plus faciles à manipuler et dont c'est la raison d'être.

En plus, en ce qui me concerne, en Winform, je trouve que les listView ne sont un bon contrôle quand il s'agit de données "pures", du texte, des nombres, des dates etc... pas d'images. Car ce contrôle ne permet pas le binding, et le binding c'est l'intérêt principal de choisir .Net par rapport à d'autres langages. Et pour ça, selon le cas le datagriview ou la listbox sont 2 solutions parfaites.

Le seul cas, à mon sens, où il faut utiliser des listview en Winform, c'est quand on veut associer données "pures" et images sur l'interface.

Par contre, la listview de WPF, c'est du bonheur....

0