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 :

Lecture et affichage d'un fichier texte : phénomène bizarre


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut Lecture et affichage d'un fichier texte : phénomène bizarre
    Bonjour,

    Je commence tout juste avec VB.net et je butte sur un problème depuis plusieurs jours que je ne parviens pas à comprendre - j'espère qu'un bonne âme saura m'expliquer où je me plante.

    J'ai écris le petit programme suivant pour afficher des valeurs contenues dans un fichier texte :

    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
    Public Class Form1
        Dim LineNumber As Integer
        Dim Datablock(,) As Integer
        Dim TextLine As String
        Dim singledataresult, SingledataType As Integer
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim OpenCameraMotionFileDialog As New OpenFileDialog()
            OpenCameraMotionFileDialog.Title = "Please Select a File"
            OpenCameraMotionFileDialog.InitialDirectory = "C:\\Program Files (x86)/MCSM"
            OpenCameraMotionFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
            If OpenCameraMotionFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
                Try
                    Dim MoCamStrm As New System.IO.StreamReader(OpenCameraMotionFileDialog.FileName)
                    If (MoCamStrm IsNot Nothing) Then
                        While Not MoCamStrm.EndOfStream
                            TextLine = MoCamStrm.ReadLine()
                            If InStr(1, TextLine, "--") = 0 Then
                                LineNumber = LineNumber + 1
                                ReDim Datablock(LineNumber, 1)
                                Dim StringSeparator() As String = {"|"}
                                Dim result() As String
                                result = TextLine.Split(StringSeparator, StringSplitOptions.RemoveEmptyEntries)
                                For Each SingleFullResult As String In result
                                    If InStr(1, SingleFullResult, "Tx") <> 0 Then singledataresult = Val(Trim(Mid(SingleFullResult, InStr(1, SingleFullResult, "Tx") + 2))) : SingledataType = 0
                                    If InStr(1, SingleFullResult, "Ty") <> 0 Then singledataresult = Val(Trim(Mid(SingleFullResult, InStr(1, SingleFullResult, "Ty") + 2))) : SingledataType = 1
                                    Datablock(LineNumber, SingledataType) = singledataresult
                                Next SingleFullResult
                            End If
                        End While
                    End If
                    MoCamStrm.Close()
                Catch Ex As Exception
                    MessageBox.Show("Cannot read file from disk. Original error: " & Ex.Message)
                End Try
            End If
            Call DisplayMotionCameraData()
        End Sub
     
        Sub DisplayMotionCameraData()
            Label1.Text = Datablock(LineNumber, 0)
            Label2.Text = Datablock(LineNumber, 1)
            Label3.Text = LineNumber
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            LineNumber = LineNumber - 1
            If LineNumber < 1 Then LineNumber = 1
            Call DisplayMotionCameraData()
        End Sub
     
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            LineNumber = LineNumber + 1
            If LineNumber > UBound(Datablock, 1) Then LineNumber = UBound(Datablock, 1)
            Call DisplayMotionCameraData()
        End Sub
    End Class
    Par ailleurs, j'ai un fichier texte ou chaque ligne est composée ainsi :
    Tx_un_entier|Ty_un_entier

    Le but est d'afficher les valeurs à côté de Tx et Ty pour chaque ligne... et c'est là que je m'arrache les cheveux : seul les valeurs de la dernière ligne s'affichent correctement, les autres sont toujours égales à 0..... Je ne comprends pas du tout ou est mon erreur - et je soupçonne que c'est parce que je n'ai pas compris un truc important sur la programmation ou sur le VB (mon niveau est vraiment bas, je l'avoue). Alors merci d'avance pour toute aide qui me permettrait de comprendre pourquoi ça marche pas.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private class T
      public Tx as integer
      public Ty as integer
    end class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    dim lines() as string = system.io.file.readalllines(pathfile)
    dim Ts as new list(of T)
    for each l as string in lines
      dim t as new T
      t.Tx = cint(split(l,"|")(0))
      t.Ty = cint(split(l,"|")(1))
      Ts.add(t)
    next
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut
    Waou, merci pour cette réponse ultra-rapide. Je vais essayer tout de suite, mais je me permets d'abuser : j'aimerai comprendre ce qui n'allait pas dans mon code initial (pour ne pas refaire l'erreur), est-ce que tu as une idée ?

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    édite ton post pour utiliser la balise code (bouton "#" dans l'interface)
    ca sera déjà plus lisible

    mais déjà tu as à mon avis trop de ligne de code pour faire ce que tu veux, et des choses à ne pas utiliser comme les redim preserve qui sont plus que lents (préférer les collections plutot que les tableaux)
    sans parler du val(trim(mid(instr (...) ca fait un peu abusé (qui sont au passage des fonctions de vb6 gardées pour la compatibilité)

    le Dim StringSeparator() As String = {"|"} il n'a rien à faire dans la boucle, il est le même à chaque tour donc déclare le au dessus
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Par défaut
    Voilà, j'ai édité le code, c'est en effet plus lisible
    Le code est écrit à partir d'un exemple fait sous excel que m'a donné un copain... il est sans doute là le problème de base !!! J'ai bien conscience qu'il est pas optimal du tout, et je vais plutôt utiliser le tien pour reconstruire le tout correctement. Merci encore

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    je ne sais pas si le miens correspond réellement à ce que tu veux faire mais tu peux t'en inspirer

    readalllines te retourne un tableau de string avec découpage par ligne du fichier
    le split sert à découper un string selon un séparateur et retourne un tableau de string, si tu es sur que tu as int|int alors le tableau contient 2 string accessibles via (0) et (1) et le cint transforme un string en integer
    après j'ai fait une classe pour stocker les 2 entiers et une collection pour stocker toutes les instances de cette classe
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [debutant] Lecture en boucle d'un fichier texte
    Par sissi25 dans le forum Langage
    Réponses: 11
    Dernier message: 30/04/2007, 11h00
  2. JTextPane : Affichage de gros fichiers texte
    Par patanoc dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 26/02/2007, 19h10
  3. Lecture de valeurs dans un fichier texte (txt)
    Par zerbault dans le forum Fortran
    Réponses: 2
    Dernier message: 22/01/2007, 10h29
  4. Affichage d'un fichier texte dans une fenetre
    Par schwinny dans le forum Access
    Réponses: 3
    Dernier message: 11/08/2006, 08h53
  5. [Ada] Affichage d'un fichier texte
    Par sneb5757 dans le forum Ada
    Réponses: 9
    Dernier message: 12/06/2006, 10h14

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