none
Comment écrire ou lire une ligne spécifique dans un fichier? RRS feed

  • Question

  •  

    J'ai trouvé sur le net toutes sortes d'exemples et d'exercices pour travailler avec des fichiers, mais pas

    Comment écrire ou lire une ligne spécifique dans un fichier *.txt

    Voilà ma question! Merci à l'avance!

    samedi 22 janvier 2011 18:59

Réponses

  • Bonjour Monocle2

    Pour lire un fichier il faut utiliser StreamReader

    Pour écrire un fichier il faut utiliser StreamWriter

     

        '
        ' Ecriture de fichier ligne par ligne
        '
        Using oWriteFile As New StreamWriter("Monfichier.txt")
          For i As Integer = 0 To 50
            oWriteFile.WriteLine(String.Format("Ligne {0}", i))
          Next
        End Using
    
        '
        ' Lecture ligne par ligne
        '
        Using oReadFile As New StreamReader("Monfichier.txt")
          Do Until oReadFile.Peek = -1
            Console.WriteLine(oReadFile.ReadLine)
          Loop
        End Using
    


    Cordialement, Troxsa
    • Proposé comme réponse TroxsaEditor samedi 22 janvier 2011 20:46
    • Marqué comme réponse Alex Petrescu vendredi 28 janvier 2011 12:13
    samedi 22 janvier 2011 20:46
    Auteur de réponse
  • Bonjour,

    Il est impossible "d'insérer" un ligne dans un fichier. Vous serez obligé de réécrire son contenu à chaque fois.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Marqué comme réponse Alex Petrescu vendredi 28 janvier 2011 12:13
    dimanche 23 janvier 2011 13:50
    Modérateur

Toutes les réponses

  • Bonjour Monocle2

    Pour lire un fichier il faut utiliser StreamReader

    Pour écrire un fichier il faut utiliser StreamWriter

     

        '
        ' Ecriture de fichier ligne par ligne
        '
        Using oWriteFile As New StreamWriter("Monfichier.txt")
          For i As Integer = 0 To 50
            oWriteFile.WriteLine(String.Format("Ligne {0}", i))
          Next
        End Using
    
        '
        ' Lecture ligne par ligne
        '
        Using oReadFile As New StreamReader("Monfichier.txt")
          Do Until oReadFile.Peek = -1
            Console.WriteLine(oReadFile.ReadLine)
          Loop
        End Using
    


    Cordialement, Troxsa
    • Proposé comme réponse TroxsaEditor samedi 22 janvier 2011 20:46
    • Marqué comme réponse Alex Petrescu vendredi 28 janvier 2011 12:13
    samedi 22 janvier 2011 20:46
    Auteur de réponse
  • Bonjour,

    Il est impossible "d'insérer" un ligne dans un fichier. Vous serez obligé de réécrire son contenu à chaque fois.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    • Marqué comme réponse Alex Petrescu vendredi 28 janvier 2011 12:13
    dimanche 23 janvier 2011 13:50
    Modérateur
  • Comment écrire ou lire une ligne spécifique dans un fichier *.txt


    Bonjour monocle 2,

    En précision :

    Réponse sur une base vb6, car en vbNet je n'ai pas encore eu besoin d'utiliser toutes les commandes des fichiers texte, je ne sais donc pas mais normalement il était, il est ? Possible :

    - On peut indiquer au pointeur une valeur, celle de l'octet où se mettre, alors si tu as des lignes formatées qui font toutes la même longueur on peut en effet lire à la ligne.

    - Il faut aussi tenir compte de la fin de ligne, si ton fichier marque (cher 13 + chr 10), ce qui est le cas par défaut, il faut compter + 2 octets. Toutefois il devrait y avoir une option qui te permet de ne pas rajouter de signe de fin de ligne, dans ce cas ton fichier ne sera qu'une seule ligne, ce qui ne change rien pour le comptage des octets identiques en nombre pour chaque ligne.

    - L'écriture sur une ligne déterminée est à l'instar de la lecture, nonobstant, ceci se fera en écrasement alors il ne faut pas se tromper avec cette méthode.

    - Tu as aussi d'autre méthodes, l'écriture par bloc, le bloc pouvant être une ligne de x octets, mais en retassement c'est assez long, j'en ai fait la triste expérience dans un agenda, je déconseille donc.

    - En dernier on peut faire des fichiers séquentiels indexés, c'est-à-dire que l'un sert d'index à l'autre, dans le premier on va en quelque sort faire une table des matières et dans l'autre y mettre les matières, dans ce cas ce n'est pas réellement ligne par ligne, sauf si ton index indique où sont chaque ligne, mais une exploitations par matière, ce qui va plus vite sur de grand fichiers, ce qui peut conduire aussi à un multicritères où on aura plusieurs clef (index), plusieurs datas qui va ensuite permettre un accès avec des critères définis... Le problème de tout ça, c'est que quand ça change il faut réindexer (exemple, un dictionnaire, tu auras un fichier texte index qui notera l'octet de début de chaque nouvelle lettre et un fichier data qui contiendra l'ensemble des définitions commençant par l'ensemble des lettres, où évidemment il faudra reconstruire l'index (réindexer) à chaque modification des datas).

    In fine on pouvait jadis, peut être que vbNet sait le faire, non pas indexer un octet d'un fichier, mais son emplacement (disque), ce qui permettait encore d'aller plus vite …

    Mais bon, pour commencer il vaut mieux se contenter de faire ligne par ligne et de comparer avec la ligne qu'on recherche puis de couper le fichier en deux, l'avant ligne recherchée et l'après ligne recherchée, puis on travaille sur sa ligne pour ensuite insérer dans un fichier vierge le début, puis sa ligne, puis la fin ...

    Tout ceci est assez simple, mais ça demande néanmoins un peu de pratique

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    dimanche 23 janvier 2011 16:08