Inserer une ligne à un endroit particulier dans un fichier txt en vb express 200

Résolu
cheryt Messages postés 8 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 15 décembre 2008 - 24 nov. 2008 à 10:40
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 - 24 nov. 2008 à 17:08
Bonjour,

Je souhaite inserer une ligne ex: après la ligne 18 (en vb express 2008) dans un fichier txt existant, mais malgré toutes les lectures existantes sur l'insertion de ligne, je ne trouve pas ma réponse...quelqu'un pourrait-il m'aider ?

merci. 

3 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
24 nov. 2008 à 11:29
Salut,

Ce que tu pourrais faire, c'est par exemple, lire tout le contenu de ton fichier text ligne par ligne et le stocker dans une variable "Buffer", puis tu recréer une copie de ton fichier en faisant une boucle sur la variable "Buffer" et quand tu arrive à la ligne 18(boucle), tu y inséres ta nouvelle ligne, puis reprend la lecture de la boucle....Enfin, je ne sais pas si c'est vraiment le top comme solution, mais bon....^^

Regarde sur Codyx.org, nombreux snippets en relations avec la lecture et l'écriture dans une fichier txt....

A+
Exploreur

 Linux a un noyau, Windows un pépin
3
cs_fauve Messages postés 661 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 23 mars 2011 8
24 nov. 2008 à 11:37
Salut,

L'astuce serait de créer une collection qui va lire tout le contenu de ton fichier et ensuite on utilise la méthode Insert de la collection pour ajouter la ligne que tu souhaites.

Et pour terminer, on écrit le contenu de la collection dans le fichier.

Voici une fonction que j'ai crée qui le fait directement :


Sub Ajout_Ligne_Fichier(ByVal CheminFichier As String, ByVal no_ligne As Integer, ByVal Ligne_a_ajouter As String)
        ' CheminFichier : doit contenir le chemin complet du fichier à modifier (exemple : D:\test.txt)
        ' no_ligne : doit contenir le numéro de ligne où on souhaite insérer la ligne
        '            (exemple : Tu souhaites ajouter après la ligne 18 donc no_ligne doit être égal à 19)
        ' Ligne_a_ajouter : doit contenir le texte que tu souhaites ajouter

        Dim Contenu_Fichier As New System.Collections.Generic.List(Of String)()
        'Création d'une collection qui va contenir tout le contenu du fichier txt lu

        Dim SR As New IO.StreamReader(CheminFichier)
        ' Déclaration et intialisation du stream pour lire le fichier

        Do Until SR.Peek = -1 ' Lecture du contenu du fichier du début jusqu'à la fin
            Contenu_Fichier.Add(SR.ReadLine())
            ' SR.ReadLine() : lit une ligne du fichier à chaque fois
        Loop

        SR.Close() ' Fermeture du fichier

        ' A ce moment là, la collection Contenu_Fichier contient tout le contenu du fichier
        ' spécifié dans CheminFichier

        ' Il faut maintenant insérer le contenu de Ligne_a_ajouter dans la collection

        Contenu_Fichier.Insert(no_ligne - 1, Ligne_a_ajouter)
        ' Le contenu de Ligne_a_ajouter a été inséré dans Contenu_Fichier

        ' Pour terminer, il ne reste plus qu'à écrire tout le contenu de la collection
        ' dans ton fichier

        Dim SW As New IO.StreamWriter(CheminFichier)
        ' Déclaration et intialisation du stream pour écrire dans le fichier

        For nb As Integer = 0 To Contenu_Fichier.Count - 1
            ' Boucle sur tous les éléments contenus dans la collection
            SW.WriteLine(Contenu_Fichier.Item(nb))
            ' Ecriture de chaque élément dans le fichier
        Next

        SW.Close() ' Fermeture du fichier

End Sub


++

Fauve
Pensez : Réponse Acceptée 
3
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
24 nov. 2008 à 17:08
Salut,
Même chose que Fauve, mais en plus court:

Dim Lines As New List(Of String)(IO.File.ReadAllLines("C:\Fichier.txt"))Lines.Insert(17, "Nouvelle ligne 18") ' index 17 car la 1ère ligne index 0
IO.File.WriteAllLines("C:\Fichier.txt", Lines.ToArray)
3
Rejoignez-nous