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 ligne dans fichier Txt


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Supprimer ligne dans fichier Txt
    Bonjour,

    je désire rechercher dans un fichier txt le mot "teste" et supprimer la ligne entière (et non pas le mot !)

    Le début de code ci-dessous me permet de trouver le mot "teste" mais, impossible à supprimer la ligne !

    Il y a t'il une commande pour supprimer une ligne complète ?

    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 Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
     
    Using flux As New StreamReader("c:/essai.txt")
     
                Dim Compteur As Integer = 0
                While (Not flux.EndOfStream)
                    Compteur += 1
                    Dim ligne As String = flux.ReadLine
                    If (ligne.Contains("teste")) Then
     
     
    End If
    End While
    End Using
    End Sub

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    un fichier n'est pas quelque de modifiable en soi, il faut le lire et l'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    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
    system.io.file.writealllines(lines.toarray)
    ca peut aussi s'écrire en une ligne sur le framework 3.5 (le .ToList fait aussi parti du 3.5 remarque ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     System.IO.File.WriteAllLines("x:\fichier.txt", _
                        System.IO.File.ReadAllLines("x:\fichier.txt").Where(New Func(Of String, Boolean)(Function(s As String) (Not s.Contains("teste")))) _
                                        )
    le code est équivalent, c'est juste que la boucle est remplacée par une implémentation en linq avec une fonction anonyme
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    ok, super, merci. cela change totalement mon code.

  4. #4
    Membre du Club Avatar de aus3004
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 47
    Points
    47
    Par défaut
    Salut tout le monde,

    j'aimerais juste savoir si ce code fonctionne avec une boucle comprennant plusieurs fichiers.
    Voila mon code, j'ai une erreur :
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection. Nom du paramètre : index
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each files In My.Computer.FileSystem.GetFiles("C:\dossier", FileIO.SearchOption.SearchAllSubDirectories, "*txt")
                    Dim lines As List(Of String) = System.IO.File.ReadAllLines(files).ToList
                    For i As Integer = 0 To lines.Count - 1
                        If lines(i).Contains("texte") Then
                            lines.RemoveAt(i)
                        End If
                    Next
                Next
    Si vous avez une idée, ca serait sympat de m'aider.
    bon dev

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    oui, sauf qu'avant le 2ème for il faut mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if lines.count = 0 then continue for
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre du Club Avatar de aus3004
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 47
    Points
    47
    Par défaut
    Merci d'avoir répondu !
    Je viens de tester et il y a la même erreur :
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection. Nom du paramètre : index
    Sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If lines(i).Contains(TextBox5.Text) Then

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    cette erreur veut dire que lines(i) n'existe pas, donc que i est supérieur au nombre possible
    lines va de 0 à n-1 pour un count = n, mais lines n'est pas indexable s'il ne contient rien

    donc normalement avec ce que je dis ca évite le problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    For Each files In My.Computer.FileSystem.GetFiles("C:\dossier", FileIO.SearchOption.SearchAllSubDirectories, "*txt")
      Dim lines As List(Of String) = System.IO.File.ReadAllLines(files).ToList
      If lines.count = 0 then Continue For ' ne passe pas à la ligne de dessous mais remonte pour traiter le prochain fichier
     
      For i As Integer = 0 To lines.Count - 1
        If lines(i).Contains("texte") Then
          lines.RemoveAt(i)
        End If
      Next
     
    Next
    vérifie en pas à pas ...

    et d'ailleurs avec removeat ca ne doit pas fonctionner, car si i vaut par exemple 5, qu'on remove à l'emplacement 5, i passe à 6 alors que celui qui était indexé à 6 avant se retrouve en 5 (vu qu'on a retiré un élément)
    il faudrait donc décrémenter i de 1 dans le if contains


    ou sinon ma solution avec linq qui ne passe pas par un itérateur local
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre du Club Avatar de aus3004
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 74
    Points : 47
    Points
    47
    Par défaut
    Ouais ta raison, c'est pas possible comme ca.
    Le code donne toujours la même erreur...

    Je vais me passer de ce code, merci quand même.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 138
    Points : 72
    Points
    72
    Par défaut Supprimer ligne dans fichier Txt
    Bonjour tout le monde.

    Moi je cherche une solution pour supprimer du fichier F1 toute ligne se trouvant dans un autre fichier F2.
    Quelqu'un pourrait me donner une solution rapide? Genre utiliser la solution de Pol63, mais lui passer comme paramètre une ligne de mon fichier F2 et non pas un mot.

    NB: J'aimerai bien que mon fichier de sortie respecte le tri tel que le fichier F1.

    Merci d'avance pour vos réponses .
    Imad_Ing
    Softwear Engineer

    Petit à petit, Rôme est batie

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    avec le readalllines tu mets les lignes de f1 dans une collection, puis une ligne de f2 dans une autre
    et ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    linesFinal = linesF1.Where(New Func(Of String, Boolean)(Function(s As String) (Not linesF2.Contains(s))))
    puis writer linesFinal dans le fichier voulu

    .where va appeler la fonction entre parenthèse pour chaque élément de F1 dans l'ordre de F1 en donnant l'element à la fonction
    c'est une fonction anonyme ici mais on aurait pu faire avec une fonction normale avec un where(new func(of string, boolean)(addressof ElementNestPasDansF2)) et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private function ElementNestPasDansF2(elementDeF1 as string) as boolean
      return not linesF2.contains(elementDeF1)
    end function
    linesF1.Where retournant les elements de linesF1 qui satisfont la condition du where dans l'ordre original
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Maroc

    Informations forums :
    Inscription : Mai 2007
    Messages : 138
    Points : 72
    Points
    72
    Par défaut Supprimer ligne dans fichier Txt
    Moi je cherche une solution pour supprimer du fichier F1 toute ligne se trouvant dans un autre fichier F2
    Merci pour votre réponse, je la déploierai tout à l'heure en fin de travail, et je la garderai pour moi; car les gens qui me l'ont demandé viennent de le redemander en Java !!!

    Merci bcp Pol63 pour la solution
    Imad_Ing
    Softwear Engineer

    Petit à petit, Rôme est batie

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

Discussions similaires

  1. [XL-2007] Supprimer Ligne dans Fichier Txt
    Par meumeu73.1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/11/2012, 13h20
  2. modifier une ligne dans fichier txt
    Par mvc_dev dans le forum C#
    Réponses: 6
    Dernier message: 14/05/2012, 13h23
  3. [VB.Net]Compter le nb de ligne dans fichier txt
    Par papy75 dans le forum Windows Forms
    Réponses: 20
    Dernier message: 15/12/2011, 15h30
  4. Supprimer lignes dans fichier texte
    Par dr_octopus74 dans le forum VBScript
    Réponses: 1
    Dernier message: 20/02/2007, 17h54
  5. prb retour a la ligne dans fichier txt telecharge avec php
    Par supersonicblonde dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2006, 14h20

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