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 :

Supprimer une ligne précise d'un fichier texte.


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut Supprimer une ligne précise d'un fichier texte.
    Bonjour les amis !
    Je voudrais supprimer une ligne précise d'un fichier texte, je pense qu'il faut d'abord le "lire" donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            For Each line As String In lines
                If line.Contains("Ma ligne à supprimer") Then
     
    'Mais je suis bloqué !
                End If
            Next
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut
    Salut,
    j'avais déjà cherché sur google mais je n'avais pas trouvé ça. J'ai utilisé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim lines as list(of string) = system.io.file.readalllines("x:\fichier.txt").tolist
    for i as integer = 0 to lines.count -1
      if lines(i).contains("teste") then 
        lines.removeat(i)
      end if
    next
    Mais lorsque le code entre en action à la ligne if lines(i).contains... J'ai cette erreur :



    C'est pas parce que je modifie le fichier host ?

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    supprimer des choses dans une collection qu'on parcours pose souvent des problèmes
    en plus il y a un bug de conception dans ton code :
    si tu removeat(5), le i suivant sera 6 , or le removeat fait que l'item 6 passe en 5ème position ( vu que tu viens de supprimer le 5)
    donc il faudrait retester l'item 5 alors que tu passes au 6 donc un item passe à la trappe sur le test

    ca peut se corriger, mais sinon avec linq to object ca peut s'écrire en plus court

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim lignes() as string = system.io.file.Readalllines(path)
    dim lignesWrite = (from l as string in lignes where not l.contains("test") select l).toarray
    system.io.file.writealllines(path,lignesWrite)
    pour les gros fichiers (> 100Mo), il ne faut pas charger tout le fichier en ram, mais lire ligne par ligne, et écrire ligne par ligne dans un autre fichier au fur et à mesure (puis delete et rename des fichiers si c'était pour un replace)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut
    Salut,
    merci ton code marche nickel ! Juste est-ce que tu pourrais me l'expliquer car je ne comprends pas trop et puis j'aimerais le modifier pour qu'il supprimer plusieurs lignes en même temps.
    Merci.

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    le principe est le même que ton code
    lire les lignes et les stocker dans un tableau
    supprimer les lignes qu'on ne veut pas
    écrire les lignes dans le fichier par dessus l'ancien contenu

    pour la suppression j'utilise linq to object, c'est une "méthode d'écriture de code proche du fonctionnel" ca commence par from et ensuite on a une panoplie de choix de ce qu'on veux écrire, un peu comme le langage sql

    dim lignesWrite() as string : je créé une variable tableau qui sera l'équivalent de lignes, mais sans les lignes qu'on ne veut pas, par recopie
    = (from l as string in lignes where not l.containts("test") select l).toarray

    from l as string in lignes : on spécifie la collection qu'on veut parcourir (équivalent du for each)
    where not l.containts("test") condition de sélection
    select l : qu'est ce qu'on sélectionne pour chaque item traité par le "for each"

    on peut rajouter de l'order by ou plein d'autres choses (jointures, u nautre from pour parcourir une collection les éléments parcourus...)
    dans le select on fait ce qu'on veut aussi, on peut faire select new telleclasse with {telle propriété = tellevaleur de l'élément parcouru}


    cependant ce n'est peut être pas la meilleure méthode, car il y a une recopie donc une perte de ram, et peut etre de temps (très peu significatif sur des fichiers jusqu'à quelques Mo)
    mais le but de linq to sql est surtout de gagner en ligne de code et en lisibilité (la lisibilité on y croit peut etre pas au début, mais une fois qu'on a compris la syntaxe ca se lit bien ^^)

    ca peut aussi s'écrire avec lignes.Where (function de predicat)
    ca revient au même, ca fait un for each, et ca retourne une nouvelle collection filtrée

    si tu as plusieurs contenu que tu ne veux pas, le mieux est de les mettres dans une collection (type list(of ))
    puis de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    writeallbytes(path, ligneslues.except(lignesquejeveuxpas).toarray)
    c'est encore plus court et plus compréhensible
    par contre c'est sensible à la casse, pour désensibilisé tu peux faire du .tolower mais pas via except
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [Débutant] Ecrire à une ligne précise dans un fichier texte
    Par Oromis56 dans le forum VB.NET
    Réponses: 4
    Dernier message: 13/04/2015, 17h49
  2. Insérer du texte à une ligne précise d'un fichier
    Par darkman19320 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 08/12/2011, 14h12
  3. Supprimer une ligne vide dans un fichier texte
    Par Tibà22 dans le forum Débuter
    Réponses: 2
    Dernier message: 18/04/2011, 16h58
  4. Lire une ligne précise d'un fichier texte
    Par Junta dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 23/04/2009, 18h26
  5. Réponses: 1
    Dernier message: 20/09/2007, 15h15

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