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 :

Récupérer le contenu d'un fichier texte et supprimer les lignes d'un autre fichier


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de CLeBeR
    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
    Points : 188
    Points
    188
    Par défaut Récupérer le contenu d'un fichier texte et supprimer les lignes d'un autre fichier
    Bonjour,
    je voudrais que mon programme qui dispose d'une liste de site puisse supprimer le contenu de cette liste si les sites sont présents dans le fichier hosts.
    J'ai crée ce code mais les lignes ne se suppriment pas.
    Si quelqu'un veut bien m'aider !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        Private Sub DebloquerSitesDangereux()
            Dim FichierSiteDangereux As String = ("C:\Users\" & System.Environment.UserName & "\Documents\ListeDeSiteContenusDangereux.txt")
     
            Dim lines As List(Of String) = System.IO.File.ReadAllLines("C:\Windows\System32\Drivers\etc\hosts").ToList
            Dim lignesAsupprimer As String = System.IO.File.ReadAllLines(FichierSiteDangereux).ToString
            ' 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(lignesAsupprimer) Then
                    lines.RemoveAt(i)
                End If
            Next
        End Sub
    Merci !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Cette ligne ne fait pas ce que tu crois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim lignesAsupprimer As String = System.IO.File.ReadAllLines(FichierSiteDangereux).ToString
    ReadAllLines renvoie un tableau de String, et quand on appelle ToString sur un tableau de String, ça renvoie "System.String[]"... Donc ton code supprime les lignes qui contiennent "System.String[]" !

    Il faut que tu fasses 2 boucles imbriquées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Private Sub DebloquerSitesDangereux()
            Dim FichierSiteDangereux As String = ("C:\Users\" & System.Environment.UserName & "\Documents\ListeDeSiteContenusDangereux.txt")
     
            Dim lines As List(Of String) = System.IO.File.ReadAllLines("C:\Windows\System32\Drivers\etc\hosts").ToList
            Dim lignesAsupprimer() As String = System.IO.File.ReadAllLines(FichierSiteDangereux)
            ' ne passe pas à la ligne de dessous mais remonte pour traiter le prochain fichier
            For i As Integer = 0 To lines.Count - 1
                For Each ligneASupprimer In lignesASupprimer
                    If lines(i).Contains(ligneAsupprimer) Then
                        lines.RemoveAt(i)
                    End If
                Next
            Next
        End Sub

  3. #3
    Membre habitué Avatar de CLeBeR
    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
    Points : 188
    Points
    188
    Par défaut
    Bonjour tomlev,
    j'ai essayé ton code, j'ai toujours le même problème. J'ai pourtant essayé de le modifier mais en vain.
    Je ne vois vraiment pas d'où peut venir l'erreur. J'aurais pensé qu'elle venait de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ligneASupprimer In lignesASupprimer
    que j'ai modifié en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ligneASupprimer In lines
    Mais j'ai une erreur.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par CLeBeR Voir le message
    Je ne vois vraiment pas d'où peut venir l'erreur. J'aurais pensé qu'elle venait de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ligneASupprimer In lignesASupprimer
    que j'ai modifié en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each ligneASupprimer In lines
    Bah ça n'a pas du tout le même sens ! Si tu fais ça tu vas supprimer toutes les lignes...

    Il se passe quoi exactement ? Il y a une erreur ou pas ? Tu as essayé de déboguer pas à pas pour voir ce qu'il se passe ?

  5. #5
    Membre habitué Avatar de CLeBeR
    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
    Points : 188
    Points
    188
    Par défaut
    Je n'ai pas d'erreur, seulement les lignes censées se supprimer ne se suppriment pas.
    J'ai essayé de déboguer en pas à pas détaillé mais "il n'y a aucune source disponible".

  6. #6
    Membre habitué Avatar de CLeBeR
    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
    Points : 188
    Points
    188
    Par défaut
    tomlev apparemment l'erreur vient du fait que l'on supprime les lignes du haut vers le bas. Je cite :
    Bonjour,
    quand on zigouille, on commence par le bas et on remonte.
    Si non : croche-pieds assurés avec les numéros de ligne
    l'argument step dans une boucle for, tu connais ? il peut être négatif pour "remonter".
    J'ai donc modifié le code mais j'ai l'erreur suivante :
    La collection a été modifiée ; l'opération d'énumération peut ne pas s'exécuter.
    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
    Private Sub DebloquerSitesDangereux()
            Dim FichierSiteDangereux As String = ("C:\Users\" & System.Environment.UserName & "\Documents\ListeDeSiteContenusDangereux.txt")
     
            Dim lines As List(Of String) = System.IO.File.ReadAllLines("C:\Windows\System32\Drivers\etc\hosts").ToList
            Dim lignesAsupprimer() As String = System.IO.File.ReadAllLines(FichierSiteDangereux)
            ' ne passe pas à la ligne de dessous mais remonte pour traiter le prochain fichier
            For i As Integer = lines.Count - 1 To 0 Step -1
                For Each ligneASupprimer In lines
                    If lines(i).Contains(ligneASupprimer) Then
                        lines.RemoveAt(i)
                    End If
                Next
            Next
     
        End Sub

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Citation Envoyé par CLeBeR Voir le message
    J'ai donc modifié le code mais j'ai l'erreur suivante :

    La collection a été modifiée ; l'opération d'énumération peut ne pas s'exécuter.
    On ne peut pas modifier le contenu d'une collection qu'on parcourt dans un For Each, or tu parcours lines via un For Each... Je t'ai dit dans le post précédent que ce n'était pas ça qu'il fallait faire de toute façon ; il faut boucler sur linesASupprimer, pas sur lines

    tomlev apparemment l'erreur vient du fait que l'on supprime les lignes du haut vers le bas.
    Oui effectivement j'avais pas fait gaffe à ça. En effet, si tu supprimes l'élément à l'index 1, ça fait que tous les suivants se décalent (le 2 devient le 1), or à l'itération suivante tu es à l'index 2, donc tu as "sauté" l'élément qui était en 2 au départ. Avec ta modification sur le For, ça devrait être bon

  8. #8
    Membre habitué Avatar de CLeBeR
    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
    Points : 188
    Points
    188
    Par défaut
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim lines As List(Of String) = System.IO.File.ReadAllLines("C:\Windows\System32\Drivers\etc\hosts").ToList
            Dim lignesAsupprimer As List(Of String) = System.IO.File.ReadAllLines(FichierSiteDangereux).ToList()
     
            For Each lineASupprimer As String In lignesAsupprimer
                lines.Remove(lineASupprimer)
            Next
     
            System.IO.File.WriteAllLines("C:\Windows\System32\Drivers\etc\hosts", lines)

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 754
    Points
    39 754
    Par défaut
    Oui mais ça ne va supprimer que les lignes qui sont exactement identiques dans les 2 fichiers... c'est bien ce que tu veux ?

  10. #10
    Membre habitué Avatar de CLeBeR
    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
    Points : 188
    Points
    188
    Par défaut
    Oui c'est ce que je veux, par exemple : Tu as le fichier 1 et le fichier 2

    Contenu du fichier 1 :
    A
    B
    C
    D
    E
    Contenu du fichier 2 :

    C
    D
    Nouveau fichier 1:

    A
    B
    E

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

Discussions similaires

  1. [LV2009] Supprimer les lignes vides dans un fichier texte
    Par Super2006 dans le forum LabVIEW
    Réponses: 3
    Dernier message: 11/11/2011, 14h32
  2. Réponses: 2
    Dernier message: 28/11/2010, 15h15
  3. Réponses: 6
    Dernier message: 30/10/2009, 16h13
  4. Réponses: 2
    Dernier message: 19/10/2009, 21h36
  5. Comment écrire dans un fichier texte sans sauter les lignes
    Par gogéta91 dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 29/07/2008, 18h56

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