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 :

probleme de lecteur avec listview1


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 323
    Par défaut probleme de lecteur avec listview1
    Bonjour, je suis entrain de cree un editor dreamcast de cheat mais j'arrive pas à recupere les 3 valeur dans listview1 : address, desc,value.

    cheat0_address = "5111210"
    cheat0_address_bit_position = "0"
    cheat0_big_endian = "false"
    cheat0_cheat_type = "1"
    cheat0_code = ""
    cheat0_desc = "Infinite Health P1"
    cheat0_enable = "false"
    cheat0_handler = "1"
    cheat0_memory_search_size = "4"
    cheat0_rumble_port = "0"
    cheat0_rumble_primary_duration = "0"
    cheat0_rumble_primary_strength = "0"
    cheat0_rumble_secondary_duration = "0"
    cheat0_rumble_secondary_strength = "0"
    cheat0_rumble_type = "0"
    cheat0_rumble_value = "0"
    cheat0_value = "500"
    cheat0_repeat_count = "1"
    cheat0_repeat_add_to_value = "0"
    cheat0_repeat_add_to_address = "0"
    cheats = "1"
    voici mon code de lecture :
    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
    Dim reader As New StreamReader(filename)
            While reader.Peek > -1
                Dim temp As New ArrayList()
                temp.Add(reader.ReadLine & Environment.NewLine)
                ListView1.BeginUpdate()
                ListView1.Items.Clear()
                For i As Integer = 0 To temp.Count - 1
                    Dim ligne As String = temp.Item(i)
                    RichTextBox1.AppendText(ligne)
                    Dim champs() As String = ligne.Split("=")
                    Dim lvi As New ListViewItem(ListView1.Items.Count)
                    lvi.SubItems.Add(champs(1).Replace("""", ""))
                    ListView1.Items.Add(lvi)
                Next
                ListView1.EndUpdate()
            End While
    pouvez-vous m'aider à recupere les 3 valeur dans listview1? merci d'avance

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    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 972
    Par défaut
    Commence déjà par virer ton tableau "temp" et la boucle for.
    Car là, tu créer un nouveau tableau temp à chaque ligne de ton fichier et tu y ajoutes un seul élément qui est la ligne que tu viens de lire.
    Tu as donc à chaque ligne un nouveau tableau qui contient toujours un seul élément, c'est inutilement compliqué

    Travaille directement sur le résultat de reader.ReadLine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Using reader As StreamReader = New StreamReader(filename)
        While reader.Peek() >= 0
            Dim ligne As String = reader.ReadLine()
            Dim champs() As String = ligne.Split("=")
            ....
        End While
    End Using

  3. #3
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 323
    Par défaut
    Bonjour Popo, merci d'avoir répondu. j'ai presque trouver la solution mais j'ai plusieurs fichier exemple : cheat0_address = "",cheat1_address = "" ....etc

    le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ListView1.Items.Clear()
            Dim alllines As List(Of String) = New List(Of String)
            alllines.Clear()
            For Each line As String In File.ReadAllLines(filename)
                alllines.AddRange(line.Replace("""", "").Split(New [Char]() {"="c}))
            Next
            ListView1.Items.Add(New ListViewItem(New String() {ListView1.Items.Count, alllines(1), alllines(9), alllines(37)}))
    j'arrive pas à charger tous les fichiers dans listview1? comment faire cela? merci d'avance

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    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 972
    Par défaut
    Si tu as plusieurs fichier, il faut en faire la liste et boucler dessus.
    alllines.Clear() est inutile puisque New List(Of String) créé une liste vide

    Il faudra faire le clear de ta ListView avant la boucle sur les fichiers pour ne pas la vider à chaque fois.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 323
    Par défaut
    bonjour, j'ai essayer plusieurs façon de lire mon fichier cheat dans listview1 mais j'arrive pas à afficher dans les 3 columns.

    Nom : Capture d’écran 2022-02-24 113019.png
Affichages : 258
Taille : 8,9 Ko

    voici mon code lecteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Using sr As New StreamReader(filename)
                While Not sr.EndOfStream
                    Dim lines As String() = sr.ReadLine.Split(New String() {""""}, StringSplitOptions.None)
                    For i = 0 To 100
                        If lines(0).Contains("cheat" & i & "_address =") OrElse lines(0).Contains("cheat" & i & "_desc =") OrElse lines(0).Contains("cheat" & i & "_value =") Then
                            ListView1.Items.Add(New ListViewItem(New String() {ListView1.Items.Count, lines(1)}))
                        End If
                    Next
                End While
            End Using
    pouvez-vous m'aider à afficher sur les 3 columns tous les noms : cheat*_address,cheat*_desc,cheat*_value dans listview1? comment puis je faire cela? merci d'avance.

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    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 972
    Par défaut
    Tu lis chaque ligne indépendamment et ajoute un item dès qu'une ligne correspond.
    Donc forcément tu as autant d'item que ligne détectée.
    Il faut regrouper tes infos avant de créer un item.

    Par contre, ton dernier code laisse supposer que tu as un seul fichier contenant toutes les lignes, contrairement à ce que tu as annoncé.
    En partant de ce principe et avec le contenu suivant dans un fichier cheats.txt :
    Code Text : 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
    cheat0_address = "2188950"
    cheat0_address_bit_position = "0"
    cheat0_big_endian = "false"
    cheat0_cheat_type = "1"
    cheat0_code = ""
    cheat0_desc = "Lance-roquettes"
    cheat0_enable = "false"
    cheat0_handler = "1"
    cheat0_memory_search_size = "4"
    cheat0_rumble_port = "0"
    cheat0_rumble_primary_duration = "0"
    cheat0_rumble_primary_strength = "0"
    cheat0_rumble_secondary_duration = "0"
    cheat0_rumble_secondary_strength = "0"
    cheat0_rumble_type = "0"
    cheat0_rumble_value = "0"
    cheat0_value = "1"
    cheat0_repeat_count = "1"
    cheat0_repeat_add_to_value = "0"
    cheat0_repeat_add_to_address = "0"
    cheat1_address = "2188948"
    cheat1_address_bit_position = "0"
    cheat1_big_endian = "false"
    cheat1_cheat_type = "1"
    cheat1_code = ""
    cheat1_desc = "Lance-roquettes Infinite Ammo"
    cheat1_enable = "false"
    cheat1_handler = "1"
    cheat1_memory_search_size = "4"
    cheat1_rumble_port = "0"
    cheat1_rumble_primary_duration = "0"
    cheat1_rumble_primary_strength = "0"
    cheat1_rumble_secondary_duration = "0"
    cheat1_rumble_secondary_strength = "0"
    cheat1_rumble_type = "0"
    cheat1_rumble_value = "0"
    cheat1_value = "999"
    cheat1_repeat_count = "1"
    cheat1_repeat_add_to_value = "0"
    cheat1_repeat_add_to_address = "0"
    cheat20_address = "2188954"
    cheat20_address_bit_position = "0"
    cheat20_big_endian = "false"
    cheat20_cheat_type = "1"
    cheat20_code = ""
    cheat20_desc = "Grenade launcher"
    cheat20_enable = "false"
    cheat20_handler = "1"
    cheat20_memory_search_size = "4"
    cheat20_rumble_port = "0"
    cheat20_rumble_primary_duration = "0"
    cheat20_rumble_primary_strength = "0"
    cheat20_rumble_secondary_duration = "0"
    cheat20_rumble_secondary_strength = "0"
    cheat20_rumble_type = "0"
    cheat20_rumble_value = "0"
    cheat20_value = "10"
    cheat20_repeat_count = "1"
    cheat20_repeat_add_to_value = "0"
    cheat20_repeat_add_to_address = "0"
    cheats = "3"

    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
    Imports System.Globalization
    Imports System.IO
     
    Module Module1
     
        Sub Main()
     
            'Lecture du fichier
            Dim lines As IEnumerable(Of String) = File.ReadAllLines("cheats.txt")
     
            'Regroupement par numéro de cheat
            Dim temporary As Int32
            Dim grouped_lines As IEnumerable(Of IGrouping(Of String, String)) = lines _
                .TakeWhile(Function(it) it.IndexOf("_", StringComparison.OrdinalIgnoreCase) > 0) _
                .GroupBy(Function(it) it.Substring(5, it.IndexOf("_"c) - 5)) _
                .Where(Function(it) Int32.TryParse(it.Key.First().ToString(), temporary)).ToList()
     
            'Creation de la collection qui va contenir les info à récupérer dans les cheats
            Dim cheats As List(Of Cheat) = New List(Of Cheat)()
     
            'Boucle sur chaque groupe de cheat
            For Each group As IGrouping(Of String, String) In grouped_lines
     
                'Création d'un objet pour rassembler les info utiles
                Dim cheat As Cheat = New Cheat()
     
                'Les clés à rechercher
                Dim address As String = String.Format(CultureInfo.InvariantCulture, "cheat{0}_address", group.Key.ToString())
                Dim description As String = String.Format(CultureInfo.InvariantCulture, "cheat{0}_desc", group.Key.ToString())
                Dim value As String = String.Format(CultureInfo.InvariantCulture, "cheat{0}_value", group.Key.ToString())
     
                'Boucle sur chaque ligne du groupe de cheat
                For Each line As String In group.ToList()
     
                    'Split sur le égal et récupération des clés et des valeurs de la ligne de cheat
                    Dim parts As String() = line.Split(New Char() {"="c}, StringSplitOptions.RemoveEmptyEntries)
                    Dim left As String = parts(0).Trim()
                    Dim right As String = parts(1).Replace("""", "").Trim()
     
                    'Si on trouve les bonnes clés, on renseigne leurs valeurs dans l'objet Cheat
                    If left.Equals(address, StringComparison.OrdinalIgnoreCase) Then
                        cheat.Address = Convert.ToInt64(right)
                    End If
                    If left.Equals(description, StringComparison.OrdinalIgnoreCase) Then
                        cheat.Description = right
                    End If
                    If left.Equals(value, StringComparison.OrdinalIgnoreCase) Then
                        cheat.Value = Convert.ToInt32(right)
                    End If
                Next
     
                'Ajout du cheat épuré à la collection
                cheats.Add(cheat)
            Next
     
            'Afichage des données
            'A remplacer par la création d'un ListViewItem
            For Each cheat As Cheat In cheats
                Console.WriteLine(cheat.ToString())
            Next
     
            Console.ReadKey()
        End Sub
     
        Public Class Cheat
            Public Property Address As Int64
            Public Property Description As String
            Public Property Value As Int32
     
            Public Overrides Function ToString() As String
                Return String.Format(CultureInfo.InvariantCulture, $"{Address}, {Description}, {Value}")
            End Function
        End Class
    End Module
    Affichage en sortie :
    2188950, Lance-roquettes, 1
    2188948, Lance-roquettes Infinite Ammo, 999
    2188954, Grenade launcher, 10

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

Discussions similaires

  1. probleme enregistrement avec listview1
    Par hacker59 dans le forum VB.NET
    Réponses: 0
    Dernier message: 31/08/2014, 12h39
  2. Probleme de lecture avec lecteur intégré
    Par jerem432 dans le forum Langage
    Réponses: 2
    Dernier message: 24/12/2012, 00h33
  3. Réponses: 13
    Dernier message: 26/04/2004, 19h32
  4. Réponses: 12
    Dernier message: 23/10/2002, 11h56
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

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