trucss
Messages postés181Date d'inscriptionjeudi 17 février 2022StatutMembreDernière intervention 9 mai 2023
-
13 mai 2022 à 10:07
Whismeril
Messages postés18416Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 1 juin 2023
-
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";"
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
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 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 .
trucss
Messages postés181Date d'inscriptionjeudi 17 février 2022StatutMembreDernière intervention 9 mai 20231 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
trucss
Messages postés181Date d'inscriptionjeudi 17 février 2022StatutMembreDernière intervention 9 mai 20231
>
trucss
Messages postés181Date d'inscriptionjeudi 17 février 2022StatutMembreDernière intervention 9 mai 2023 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
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165 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
trucss
Messages postés181Date d'inscriptionjeudi 17 février 2022StatutMembreDernière intervention 9 mai 20231 13 mai 2022 à 17:07
j'ai erreur sur subitem non declaré
vb95
Messages postés3418Date d'inscriptionsamedi 11 janvier 2014StatutContributeurDernière intervention31 mai 2023165
>
trucss
Messages postés181Date d'inscriptionjeudi 17 février 2022StatutMembreDernière intervention 9 mai 2023 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 ?
Whismeril
Messages postés18416Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 1 juin 2023624 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....
Modifié le 13 mai 2022 à 16:44
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
13 mai 2022 à 17:03