Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Comment] Lire fichier ligne par ligne

VB.NET

Sujet résolu
    6 août 2011 à 12:21:05

    Bonjour à toutes et à tous !

    Je bloque sur le développement de mon logiciel a cette etape : lire le fichier ligne par ligne
    par exemple la ligne une du fichier s'affichera dans la textbox 1
    la ligne 2 dans textbox 2
    etc...

    Pour vous aidez à m'aider voici mon code
    Private Sub OuvrirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OuvrirToolStripMenuItem.Click
            Me.OpenFileDialogu1.Filter = "Fichiers Note (*.nte)|*.nte"
            Me.OpenFileDialogu1.FileName = "*.nte"
            Me.OpenFileDialogu1.ShowDialog()
        End Sub
        Private Sub OpenFileDialogu1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialogu1.FileOk
            Dim sr As IO.StreamReader
            Dim sLine As String
            sr = New IO.StreamReader(OFD1.OpenFile, System.Text.Encoding.Default)
            sLine = sr.ReadLine
            TextBox1.Text = sLine
        End Sub
        Private Sub EnregistrerSousToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EnregistrerSousToolStripMenuItem.Click
            SaveFileDialog1.Filter = "Fichiers Note (*.nte)|*.nte"
            SaveFileDialog1.ShowDialog()
            File.WriteAllText(SFD1.FileName, TextBox1.Text & vbCrLf & TextBox2.Text & vbCrLf & TextBox3.Text & vbCrLf & TextBox4.Text, System.Text.Encoding.Default)
        End Sub
    


    Merci d'avance pour vos réponces que j'attend avec une grande patience
    • Partager sur Facebook
    • Partager sur Twitter
      6 août 2011 à 12:38:04

      Salut,

      En cherchant via Google et comme mots clés "vb.net lire un fichier texte ligne par ligne", le premier lien semble répondre à ta question. Il te reste à modifier dans la boucle le MsgBox en affectation sur un TextBox.Text.

      @+
      • Partager sur Facebook
      • Partager sur Twitter
        6 août 2011 à 12:43:58

        J'avais chercher aussi j'ai trouvé ce lien mais je n'ai pas tout comprit et je ne comprent toujours pas :(
        • Partager sur Facebook
        • Partager sur Twitter
          6 août 2011 à 13:32:01

          Ok donc voici le code en question, je me demande ce qui n'est pas compréhensible surtout qu'il est commenté.

          Sub lectureFichier(ByVal fichier As String)
              Try
                 Dim monStreamReader As New StreamReader(fichier) 'Stream pour la lecture
                 Dim ligne As String ' Variable contenant le texte de la ligne
                 Do
                    ligne = monStreamReader.ReadLine
                    MsgBox(ligne)
                    ' TRAITEMENT A EFFECTUER SUR LA LIGNE ICI
                 Loop Until ligne Is Nothing monStreamReader.Close()
              Catch ex As Exception
                 MsgBox("Une erreur est survenue au cours de l'accès en lecture du fichier de configuration du logiciel." & vbCrLf & vbCrLf & "Veuillez vérifier l'emplacement : " & fichier, MsgBoxStyle.Critical, "Erreur lors e l'ouverture du fichier conf...")
              End Try
          End Sub
          


          Il fait un boucle de lecture de ligne sur un fichier texte et ce tant qu'il y a une ligne (variable "ligne" de la boucle Do Loop).
          Sinon quelle partie ne te semble pas claire ou soit plus clair dans ce que tu voudrais obtenir.

          @+
          • Partager sur Facebook
          • Partager sur Twitter
            6 août 2011 à 13:49:15

            Je ne sait pas comment je vais faire pour mettre tel ligne dans tel textbox en sachant que ligne un dans textbox 1 et ligne 2 dans tb 2 etc, je ne sait pas où mettre sa dans le code
            • Partager sur Facebook
            • Partager sur Twitter
              6 août 2011 à 17:00:16

              Tu dois le mettre là où il faut :D
              Je veux dire que c'est toi qui voit, un fois la procédure le code de la form tu vas la chercher dans le Form1_Load si tu veux mettre à jour tes Labels au lancement de l'application.
              Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                      lectureFichier("Z:\Test.txt")
                  End Sub
              
                  Sub lectureFichier(ByVal fichier As String)
                      Dim I As Integer = 0
                      Try
                          Dim monStreamReader As New StreamReader(fichier) 'Stream pour la lecture
                          Dim ligne As String ' Variable contenant le texte de la ligne
                          Do
                              I = I + 1
                              ligne = monStreamReader.ReadLine
                              If I = 1 Then TextBox1.Text = ligne
                              If I = 2 Then TextBox2.Text = ligne
                              If I = 3 Then TextBox3.Text = ligne
                              If I = 4 Then TextBox4.Text = ligne
                              If I > 4 Then Exit Do
                          Loop Until ligne Is Nothing
                          monStreamReader.Close()
                      Catch ex As Exception
                          MsgBox("Une erreur est survenue au cours de l'accès en lecture du fichier de configuration du logiciel." & vbCrLf & vbCrLf & "Veuillez vérifier l'emplacement : " & fichier, MsgBoxStyle.Critical, "Erreur lors e l'ouverture du fichier conf...")
                      End Try
                  End Sub
              


              J'avoue que c'est moche mais voilà chez moi cela marche.

              @+

              Edit : modification de la boucle, il y avait un tour pour rien.
              • Partager sur Facebook
              • Partager sur Twitter
                6 août 2011 à 20:06:11

                Salut,

                C'est moche, pas tant que ça. Avec un simple fichier texte je pense pas que tu as trop le choix.

                Pour un truc plus solide je pense qu'il faut passer au xml mais là ça sort du sujet :)

                Au passage, nikel le Dim I As Integer = 0, ça va me faire gagner des lignes ^^

                Je viens tout droit du C C++ C# et je n'ai fait que quelques bidouilles en VB, je le fais en C# mais le As Integer m'a fait peur et j'ai pas tenté le = ma_valeur xD

                Merci
                • Partager sur Facebook
                • Partager sur Twitter
                  8 août 2011 à 16:13:16

                  J'ai un peu modifier le code pour qu'il soit parfait vis-a-vis de mes exigeances
                  Private Sub OFD1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OFD1.FileOk
                          Dim i As Integer = 0
                          Try
                              Dim sr As IO.StreamReader
                              Dim Ligne As String
                              sr = New IO.StreamReader(OFD1.OpenFile, System.Text.Encoding.Default)
                              Do
                                  i = i + 1
                                  Ligne = sr.ReadLine
                                  If i = 1 Then CB_MATIERE1.Text = Ligne
                                  If i = 2 Then Note1.Text = Ligne
                                  If i = 3 Then sur1.Text = Ligne
                                  If i = 4 Then Coef1.Text = Ligne
                              Loop Until Ligne Is Nothing
                              sr.Close()
                          Catch ex As Exception
                              MsgBox("La lecture du fichier est terminée")
                          End Try
                      End Sub
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 août 2011 à 16:40:38

                    Private Sub OFD1_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OFD1.FileOk
                            Dim i As Integer = 0
                            Try
                                Dim sr As IO.StreamReader
                                Dim Ligne As String
                                sr = New IO.StreamReader(OFD1.OpenFile, System.Text.Encoding.Default)
                                Do
                                    i = i + 1
                                    Ligne = sr.ReadLine
                                    If i = 1 Then CB_MATIERE1.Text = Ligne
                                    If i = 2 Then Note1.Text = Ligne
                                    If i = 3 Then sur1.Text = Ligne
                                    If i = 4 Then Coef1.Text = Ligne
                                Loop Until Ligne Is Nothing
                                sr.Close()
                            Catch ex As Exception
                                MsgBox("La lecture du fichier est terminée")
                            End Try
                        End Sub
                    


                    Exigences ? Bof, je trouve bizarre le traitement en cas d'erreur. En gros si ton fichier n'existe pas, lance ton programme et regarde ce qu'il te retourne ... Et puis tu n'as retiré que ma sortie de boucle après la ligne 4, j'espère que ton fichier n'aura pas tendance à augmenter son nombre de ligne. Cela il n'y a que toi qui le sait.

                    D'ailleurs j'ai oublié de la mettre la MsgBox en MessageBox.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 août 2011 à 16:42:52

                      Au passage un Split sur une string contenant la totalité du fichier n'aurait-il pas été plus simple ? :-° En supposant que son fichier n'est pas trop gros bien sûr...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 février 2013 à 21:41:10

                        Bonjour,

                        Dans mon cas avec la commande dos je créer un fichier :

                        Dim p As New Process()
                        
                                    p.StartInfo.FileName = "CMD.exe" 'lance CMD
                                    p.StartInfo.Arguments = "/c xcopy /y /f ""C:\test.txt"" ""d:\test.txt"" >c:\test1.txt"
                        p.Start()
                        
                        
                                    TextBox1.Text = IO.File.ReadAllText("c:\test1.txt") 'lecture du txt
                                    TextBox1.Text = IO.File.ReadAllText("c:\test2.txt")
                        
                        

                        lorsque je veux lire les txt il m'en lit qu'une seul (le test2.txt)

                        ps : test2.txt existe déjà auparavant dans c:\

                        pourquoi ?

                        merci

                        -
                        Edité par llbanks 12 février 2013 à 21:41:38

                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 février 2013 à 9:53:02

                          Salut

                          test1.txt existe bien?

                           TextBox1.Text = IO.File.ReadAllText("c:\test1.txt") 'lecture du txt
                           TextBox1.Text += IO.File.ReadAllText("c:\test2.txt")


                          Le += va reprendre les valeur qu'il y a dans textbox1 et en plus les nouvelles de test2.

                          += tu peux l'écrire ex: TextBox1.Text = TextBox1.Text + "toto";

                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 février 2013 à 21:03:29

                            trop fort merci je me suis casser la tête pour simplement le petit +

                            j'apprend dans le tas le VB par internet il me manque plein de notions :(

                            merci beaucoup

                            et dit une fois le fichier lu dans le textbox le caractérer "é" est remplacer par un carré comment faire ?

                            • Partager sur Facebook
                            • Partager sur Twitter
                              13 février 2013 à 21:06:35

                              C'est ton fichier texte qui ai mal encodé, sois tu l'ouvres avec notepad++ ou autre et tu fait convertir en utf-8 sans dom. 

                              Mais y a moyen de faire par code je croit, faut regarder sur bing :p

                              • Partager sur Facebook
                              • Partager sur Twitter
                                13 février 2013 à 21:12:06

                                ouvrir avec notepad ++ ne sert a rien vu que sa sera un logiciel de sauvegarde que bcp de personne vont l'utiliser donc ils ont pas tous le notepad++

                                franchement j'ai beau chercher mais rien trouver sur le net  j'ai même essayer en .rtf mais pareil

                                ok je vais encore chercher si j'ai la soluce je le posterais :)

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  13 février 2013 à 21:15:38

                                  Cherche ça sur google : convert utf8 string c#
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    13 février 2013 à 21:54:14

                                    Salut Max mes recherche n'aboutisse pas j'ai essayer de faire du copier coller des codes qu'il donne mais sans succès tant pis je vais laisser comme 

                                    et peut etre sur ma v2 je corrigerais ce pb ^^

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    [Comment] Lire fichier ligne par ligne

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown