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

ASP.NET Discussion :

Bug en lisant un fichier txt


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut Bug en lisant un fichier txt
    Bonjour,

    j'ai enregistré différents items dans un fichier text, séparés par des ControlChars.VerticalTab

    Je cherche a relire ces items pour les remettre en place dans mon programme.

    J'ai fait comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim flux As IO.StreamReader = Nothing
            Dim nomretour As String
            nomretour = Listing.SelectedItem
            flux = New IO.StreamReader(nomretour) 
            Dim result() As String = Split(flux.ReadToEnd, ControlChars.VerticalTab) 
            box1.Text = result(0)        
            box2.Text = result(1) 
            box3.Text = result(2) 
            box4.Text = result(3)
            box5.Text = result(4)
            If result(5) = 1 Then box6.Checked = True Else box6.Checked = False
            If result(6) = 1 Then box7.Checked = True Else box7.Checked = False
            flux.Close()
    mais le programme plante en cliquant sur le boutton qui lance ce code....

    Quelqu'un a une idée de la raison qui fait planter le prog ?

  2. #2
    Membre confirmé Avatar de roshy
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Par défaut
    Le texte d'erreur serait le bienvenue. Et pour trouver la ligne, tu peux mettre un point d'arrêt au ébut de ton code et faire le débogage pas à pas (F11) pour trouver la ligne.

    Cependant, j'émetterais quand même une hypothèse. Personnellement, je mettrais le flux.ReadtoEnd dans une variable du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim LeTexte as string = flux.ReadToEnd
    Dim result() As String = Split(LeTexte, ControlChars.VerticalTab)
    Parce que justement c'est un flux et non pas un teste définit. Ça se peut très bien que ce ne soit pas ça, mais si tu arrives avec les infos supplémentaires, ça va peut-être devenir plus clair .

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    MsgBox("arrêt0")
            Dim flux As IO.StreamReader = Nothing
            MsgBox("arrêt1")
            Dim nomretour As String
            MsgBox("arrêt2")
            nomretour = Listing.SelectedItem
            MsgBox("arrêt3")
            flux = New IO.StreamReader(nomretour) 'ouvre le fichier
            MsgBox("arrêt4")
            Dim LeTexte As String = flux.ReadToEnd
            Dim result() As String = Split(LeTexte, ControlChars.VerticalTab) 'lis toutes les données
            MsgBox("arrêt5")
    ca plante après l'arrêt 3

    sinon, le code de l'enregistrement du fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim wAssemby As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
            Dim wAppPath As String = System.IO.Path.GetDirectoryName(wAssemby.GetName.CodeBase)
            Dim FilePath2 As String = wAppPath & "box1.Text & ".txt"
     
            Dim flux2 As New IO.StreamWriter(FilePath2, False)
            flux2.Write(box1.Text & ControlChars.VerticalTab & box2.Text & ControlChars.VerticalTab & box3.Text & ControlChars.VerticalTab & box4.Text & ControlChars.VerticalTab & box5.Text 5)
            flux2.Close() 
            MsgBox("Dossier mémorisé")

  4. #4
    Membre confirmé Avatar de roshy
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Par défaut
    À ce moment là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    flux = New IO.StreamReader(nomretour)
    ta variable "nomretour" est égale à quoi? Qu'est-ce que ton "Listing.SelectedItem" a retourné?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    je fais le test

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    il me sort le nom du fichier correct complet, avec extension

  7. #7
    Membre confirmé Avatar de roshy
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Par défaut
    Hmmm je crois que c'est parce que tu prend seulement le Name de ton fichier. Il est donc pas capable d'aller le chercher, n'ayant pas le path. Essait en remplaçant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Listing.Items.Add(File_Info.Name)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Listing.Items.Add(File_Info.FullName)
    Bien sur, ton affichage sera peut-être pas celui que tu veux, mais si ça marche, on s'occupera de ça après.

    EDIT : Tu peux reposté ton code du listing que tu as enlever stp

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    Effectivement, il n'y a plus de bug.... Comme tu l'a dit, l'affichage dans ma lisbox change pas contre beaucoup puisque tous le chemin du fichier (storagecard/.........) apparait.

    Je te remet les codes actuels

    Stocker le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim wAssemby As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
            Dim wAppPath As String = System.IO.Path.GetDirectoryName(wAssemby.GetName.CodeBase)
            Dim FilePath2 As String = wAppPath & box1.Text & ".txt"
     
            Dim flux2 As New IO.StreamWriter(FilePath2, False)
            flux2.Write(box1.Text & ControlChars.VerticalTab & box2.Text & ControlChars.VerticalTab & box3.Text & ControlChars.VerticalTab & box4.Text & ControlChars.VerticalTab & box5.Text & ControlChars.VerticalTab & val6 & ControlChars.VerticalTab & val7 & ControlChars.VerticalTab & val8 & ControlChars.VerticalTab) 'ecris les données
            flux2.Close() 'ferme le fichier
            MsgBox("Dossier mémorisé")

    afficher les dossiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Listing.Items.Clear()
            Dim wAssemby As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
            Dim wAppPath As String = System.IO.Path.GetDirectoryName(wAssemby.GetName.CodeBase)
            Dim AllFile As String() = IO.Directory.GetFiles(wAppPath)
            For Each File As String In AllFile 'on liste
                Dim File_Info As New IO.FileInfo(File)
                If File_Info.Extension = ".txt" Then
                    Listing.Items.Add(File_Info.FullName)
                End If
            Next
    charger les dossiers

    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
     Private Sub Buttoncharger_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttoncharger.Click
            Dim flux As IO.StreamReader = Nothing
            Dim nomretour As String
            nomretour = Listing.SelectedItem
            MsgBox(nomretour)
            flux = New IO.StreamReader(nomretour) 'ouvre le fichier
            Dim LeTexte As String = flux.ReadToEnd
            Dim result() As String = Split(LeTexte, ControlChars.VerticalTab) 'lis toutes les données
            box1.Text = result(0) 'ici tu as ce qui tu as ecrits en premier
            box2.Text = result(1) 'ici tu as ce qui tu as ecrits en second
            box3.Text = result(2) 'ici tu as ce qui tu as ecrits en troisieme
            box4.Text = result(3)
            box5.Text = result(4)
            If result(5) = 1 Then box6.Checked = True Else box6.Checked = False
            If result(6) = 1 Then box7.Checked = True Else box7.Checked = False
            MsgBox("Dossier correctement chargé")
            flux.Close()

  9. #9
    Membre confirmé Avatar de roshy
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Par défaut
    Bon il y a deux façon pour l'affichage soit tu te créé une liste de correspondance soit tu créé une classe.

    Pour la liste de correspondance est la façon la plus simple, mais donne du moins "beau code" que la deuxième.

    Alors pour la première façon, tu te définit une liste du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim ListeFull as new ArrayList
    Au moment ou tu ajoute tes items dans ton listbox tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Listing.Items.Add(File_Info.Name)
    ListeFull.Add(File_Info.FullName)
    Donc le nom dans le listbox et le FullName dans la liste auront le même index. Donc lors de la lecture tu auras :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nomretour = ListeFull(Listing.SelectedIndex)
    Puisque les deux sont à la même index, tu auras le FullName. Remarque que cela ne fonctionne pas dans le cas où le listbox est Sorted. Pour ça il faut utilisé l'autre méthode.

    L'autre méthode est plus complexe et je peux te l'expliquer si tu en a envie.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    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
     
     
     Dim ListeFull As New ArrayList
     
        'actualiser les dossiers'
     
        Private Sub Buttonactualiser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonactualiser.Click
            Listing.Items.Clear()
            Dim ListeFull As New ArrayList
            Dim wAssemby As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
            Dim wAppPath As String = System.IO.Path.GetDirectoryName(wAssemby.GetName.CodeBase)
            Dim AllFile As String() = IO.Directory.GetFiles(wAppPath)
            For Each File As String In AllFile 'on liste
                Dim File_Info As New IO.FileInfo(File)
                If File_Info.Extension = ".txt" Then
                    Listing.Items.Add(File_Info.Name)
                    ListeFull.Add(File_Info.FullName)
                End If
            Next
        End Sub
     
     
        'charger les dossiers'
     
        Private Sub Buttoncharger_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttoncharger.Click
            Dim flux As IO.StreamReader = Nothing
            Dim nomretour As String
            MsgBox("arrêt avant nomretour nouveau")
            nomretour = ListeFull(Listing.SelectedIndex)
            MsgBox(nomretour)
            flux = New IO.StreamReader(nomretour) 'ouvre le fichier
            Dim LeTexte As String = flux.ReadToEnd
            Dim result() As String = Split(LeTexte, ControlChars.VerticalTab) 'lis toutes les données
    Ca plante après la msgbox "arrêt avant nomretour nouveau", mais l'affichage dans la listbox est bon

  11. #11
    Membre confirmé Avatar de roshy
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Par défaut
    Pardon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomretour = ListeFull.Item(Listing.SelectedIndex)

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Private Sub Buttoncharger_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttoncharger.Click
            Dim flux As IO.StreamReader = Nothing
            Dim nomretour As String
            MsgBox("arret test")
            nomretour = ListeFull.Item(Listing.SelectedIndex)
            MsgBox(nomretour)
    Ca plante après "arrêt test" toujours

  13. #13
    Membre confirmé Avatar de roshy
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Par défaut
    Arrg :S Tu as le message d'erreur? Ta ListeFull il y a quelque chose dedans? Ton SelectedIndex te retourne quelque chose?

    Le pire c'est que ce serais tellement facile en étant à coté de toi lol.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    Le programme ne fonctionne pas sous windows (problême de formats URI non pris en charge), je n'ai donc que le message d'erreur de mon PDA qui ne donne pas trop d'infos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bilan.exe
    ergumentoutofrengeexceptions
     
    application::run+Oxf
    form1::main+Oxa

    en rajoutant une textbox pour lire la listfuul

    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
    Private Sub Buttonactualiser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonactualiser.Click
            Listing.Items.Clear()
            Dim ListeFull As New ArrayList
            Dim wAssemby As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
            Dim wAppPath As String = System.IO.Path.GetDirectoryName(wAssemby.GetName.CodeBase)
            Dim AllFile As String() = IO.Directory.GetFiles(wAppPath)
            For Each File As String In AllFile 'on liste
                Dim File_Info As New IO.FileInfo(File)
                If File_Info.Extension = ".txt" Then
                    Listing.Items.Add(File_Info.Name)
                    ListeFull.Add(File_Info.FullName)
                End If
            Next
            Dim tester As String = ListeFull.Item(Listing.SelectedIndex)
            TextBox10.Text = tester
        End Sub
    ca fait planter, alors que sans la listbox, ca passe...

    QU'est ce que je peux faire pour aider au diagnostic ?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    Apparement, j'ai trouvé.... ca doit pas être du b'au code" je pense quand même....

    je te donne le code pour avis (et explications, car j'ai du mal malgré tout...)

    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
    Private Sub Buttonactualiser_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonactualiser.Click
            Listing.Items.Clear()
            Dim wAssemby As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
            Dim wAppPath As String = System.IO.Path.GetDirectoryName(wAssemby.GetName.CodeBase)
            Dim AllFile As String() = IO.Directory.GetFiles(wAppPath)
            For Each File As String In AllFile 'on liste
                Dim File_Info As New IO.FileInfo(File)
                If File_Info.Extension = ".txt" Then
                    Listing.Items.Add(File_Info.Name)
                End If
            Next
        End Sub
     
     
        'charger les dossiers'
     
        Private Sub Buttoncharger_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttoncharger.Click
     
            Dim wAssemby As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
            Dim wAppPath As String = System.IO.Path.GetDirectoryName(wAssemby.GetName.CodeBase)
            Dim AllFile As String() = IO.Directory.GetFiles(wAppPath)
     
            Dim flux As IO.StreamReader = Nothing
            Dim nomretour As String = Listing.SelectedItem
            Dim lecteur As String = wAppPath & "\" & nomretour
            MsgBox(lecteur)
            flux = New IO.StreamReader(lecteur) 'ouvre le fichier
            Dim LeTexte As String = flux.ReadToEnd
            Dim result() As String = Split(LeTexte, ControlChars.VerticalTab) 'lis toutes les données
    SI j'ai bien fait ce que je voulais (ca marche remarque...), j'ai re déterminé le chemin du prog et je lui ai ajouté le selected.item de la liste en gardant name et pas fullname..

  16. #16
    Membre confirmé Avatar de roshy
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 107
    Par défaut
    C'est beaucoup plus simple comme ça. Bonne idée lol.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 113
    Par défaut
    Merci beaucoup pour ton aide en tout cas....

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/05/2015, 23h02
  2. [SQLServer]Script import fichier .txt
    Par Jenbi dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/08/2006, 16h49
  3. ouverture de fichier txt
    Par juguul dans le forum MFC
    Réponses: 11
    Dernier message: 18/12/2003, 09h44
  4. [langage] prob lecture fichier .txt
    Par martijan dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2003, 11h08
  5. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19

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