Lire des infos spécifiques dans un fichier txt

Résolu
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017 - 16 mai 2008 à 14:52
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017 - 20 mai 2008 à 06:20
Bonjour,

Descriptif de mon probléme :

Dans mon fichier texte, j' ai des lignes qui sont enregistrées du type :

N° du Code : 01234567   16:57:32
N° du Code : 76543210   16:45:21
etc

Comment dois je faire pour ne récupérer que les infos que j' ai besoins ( dans ce cas : 01234567   16:57:32, sans le texte : N° du Code : ) dans une listbox ?

J' ai fait une recherche sur le site et on parle de : seek(1,position)

Mais je n' ai pas réussi à m' en servir ou ce n' est pas du tout ça qui me préléve les infos là où j' en ai besoin !

Merci par avance de l' aide que vous pourrez m' apporter.

PS : Si vous pouvez m' aiguiller aussi sur le fait que dans ma listbox je voudrais classer ces infos soit par leur N° soit par leurs heures

Fripouil

8 réponses

Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
19 mai 2008 à 02:16
Re,
Il faut bien créer 2 colonnes dans la ListView, mais aussi changer sa propriété View sur Details.

Voici un exemple complet et fonctionnel:

1° Créer un nouveau projet
2° Ajouter ListView1 sur Form1
3° On peut changer les propriétées suivantes de ListView1 au moment du design:
View = Details
Colums: Ajouter 2 colonnes.
4° On peut changer la largeur des colonnes directement sur l'appercu
5° On ajoute ce code:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ' Lire les lignes du fichier
        Dim Lines() As String = IO.File.ReadAllLines("C:\Fichier.txt", New System.Text.UTF7Encoding)

        ' Parcourir chaque ligne du fichier
        For Each Line As String In Lines

            ' Vérifier que la ligne commence par "N° du Code :"
            If Line.StartsWith("N° du Code :") Then

                ' Enlever le début inutile de la ligne (12 = longueur de la chaine "N° du Code :")
                Line = Line.Substring(12).Trim

                ' Extraire le code
                Dim Code As String = Line.Substring(0, Line.IndexOf(" ")).Trim

                ' Extraire l'heure
                Dim Time As String = Line.Substring(Line.IndexOf(" ")).Trim

                ' Créer et ajouter l'item à la ListView
                Dim Item As New ListViewItem(Code)
                Item.SubItems.Add(Time)
                ListView1.Items.Add(Item)

            End If
        Next
    End Sub

End Class

a) C:\Fichier.txt doit spécifier le fichier à ouvrir
b) J'avais fais une erreur dans mon code: StartsWith et pas StartWith
c) J'ai créé le fichier à ouvrir avec le bloc note. Lorsque on enregistre le fichier, le codage par défaut est ANSI = UTF7. Il faut donc spécifier ce même codage lorsque on ouvre ce fichier dans notre code pour que le ° soit correctement décodé.

Et voici le résultat:
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
16 mai 2008 à 15:15
Bonjour

Ouvre le fichier en mode texte (en utilisant TextStream, voir MSDN), ensuite ReadLine et .SubString de String.

Le fer à souder a besoin d'une panne pour fonctionner.
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
16 mai 2008 à 18:29
Salut,

Si tu veux classer soit par leur N° soit par leurs heures, n'utilise pas une ListBox mais une ListView.

' Lire les lignes du fichier
Dim Lines() as String = IO.File.ReadAllLines("C:\Fichier.txt")  
' Parcourir chaque ligne du fichier
For Each Line As String In Lines
    ' Vérifier que la ligne commence par "N° du Code :"
    If Line.StartWith("N° du Code :") Then
       ' Enlever le début inutile de la ligne (12 = longueur de la chaine "N° du Code :")
       Line = Line.SubString(12).Trim
       ' Extraire le code
       Dim Code as String = Line.SubString(0, Line.IndexOf(" ")).Trim  
       ' Extraire l'heure
       Dim Time as String = Line.SubString(Line.IndexOf(" ")).Trim

       ' Créer et ajouter l'item à la ListView
       Dim Item As New ListViewItem(Code)
       Item.SubItems.Add(Time)
       ListView1.Items.Add(Item)

    End If
Next

J'ai pas vérifier si le code fonctionne, mais je pense que c'est bon.
Après pour classer suivant la colonne, c'est un autre sujet. Il faut créer un Comparer pour la ListView.
http://msdn.microsoft.com/fr-fr/library/cfttsh47.aspx
Puis tu l'applique à la propriété ListViewItemSorter de la ListView:
http://msdn.microsoft.com/fr-fr/library/system.windows.forms.listview.listviewitemsorter.aspx
(Il y a un très bon exemple de son utlisation)
0
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017
18 mai 2008 à 19:41
Merci,

mais dans ma listview je n' ai que les Codes qui apparaissent

Ai je bien fait de créer 2 colonnes dans ma listview : Codes et Heure ?

Fripouil
0

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

Posez votre question
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017
18 mai 2008 à 19:50
PS et surement important :

Depuis ma premiére question sur ce sujet, j' ai modifié ma maniére de faire

Je récupére les infos de mon TXT dans une listbox, puis supprime les items : N° du Code :

Est ce cela le probléme ??
ou alors parce que j' ai créer 2 colonnes dans ma listview ??

Fripouil
0
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017
19 mai 2008 à 15:18
Merci Kevin.Ory et les autres.

Mais j' ai un autre probléme, comment comparer 2 listview ainsi créées et afficher dans une 3éme les éléments manquants de la listview2 par rapport à la listview1.

Car dans ce cas, faut il comparer les items et les subitems ? ai-je bien compris ?

Et pour ma troisiéme, faut il faire la même manip pour créer les items manquants ?

Merci encore

Fripouil
0
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
19 mai 2008 à 19:47
Car dans ce cas, faut il comparer les items et les subitems ? ai-je bien compris ?


Forcément il faudra aussi comparer le SubItem si l'heure est importante dans ton tri.
Tu peux aussi d'abord créer une liste avant d'ajouter tes items à la ListBox (List(of xxxx))

Et pour ma troisiéme, faut il faire la même manip pour créer les items manquants ?
Ben.. a toi de voir. Mtn tu sais ajouter des Items à une ListView, à toi d'imaginer ton programme
0
cs_Fripouil Messages postés 175 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 8 mai 2017
20 mai 2008 à 06:20
Désolé mais je n' y arrive pas.

Je ne comprends pas comment comparer ses fichus listview.

J' ai beau bidouiller, j' ai sans arrêt des bugs.

J' ai déja eu du mal à comprendre pour 1 infos à comparer mais avec 2 !!!

Mais là, je dois mal m 'y prendre..

Fripouil
0
Rejoignez-nous