Récupérer le contenu d'un fichier texte et supprimer les lignes [Résolu]

- - Dernière réponse : cs_ShayW
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
- 7 oct. 2013 à 22:42
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 !

    Private Sub DebloquerSitesDangereux()
        Dim FichierSiteDangereux As String = ("C:Users\" & System.Environment.UserName & "DocumentsListeDeSiteContenusDangereux.txt")
 
        Dim lines As List(Of String) = System.IO.File.ReadAllLines("C:WindowsSystem32Driversetchosts").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 !
Afficher la suite 

15 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
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".
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
Commenter la réponse de ucfoutu
0
Merci
Salut !
Non je ne connais pas le step, cependant un membre de developpez m'a proposé ce code qui ne fonctionne pas non plus.
Private Sub DebloquerSitesDangereux()
        Dim FichierSiteDangereux As String = ("C:Users\" & System.Environment.UserName & "DocumentsListeDeSiteContenusDangereux.txt")
 
        Dim lines As List(Of String) = System.IO.File.ReadAllLines("C:WindowsSystem32Driversetchosts").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
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Et pour cause !
Il fait la même erreur et se fait les mêmes croche-pieds que toi !
Je t'ai répondu plus haut. A toi de jouer (vraiment simple).
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Et si cela ne te dit vraiment rien, "CLeBeR", rapporte donc mes propos (mon 1er message) à tomlev... Il devrait alors comprendre et se corriger (j'espère).
Commenter la réponse de ucfoutu
0
Merci
J'ai le droit à un Joker ? ahah
J'ai fais comme tu me l'as demandé, je vais de bas en haut, j'utilise aussi l'argument step.
    Private Sub DebloquerSitesDangereux()
        Dim FichierSiteDangereux As String = ("C:Users\" & System.Environment.UserName & "DocumentsListeDeSiteContenusDangereux.txt")

        Dim lines As List(Of String) = System.IO.File.ReadAllLines("C:WindowsSystem32Driversetchosts").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


J'ai une erreur, ou alors même si je bidouille un peu, les lignes ne se suppriment pas.
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
1) "J'ai une erreur" ne dit pas laquelle, ni sur quelle ligne
2) je t'ai de mon côté signalé l'erreur la plus évidente (la plus grossière) , même sans connaître VB.Net. Le reste m'échappe (je développe sous VB6)

Je remarque au passage que tu n'as pas suivi (compris ?) le code qui t'a été donné ailleurs.
For Each ligneASupprimer In lignesASupprimer
If lines(i).Contains(ligneAsupprimer) Then
lines.RemoveAt(i)
End If
Next
Mais que tu as laissé la ligne :
Dim lignesAsupprimer() As String = system.IO.File.ReadAllLines(FichierSiteDangereux)
sans même te servir de lignesAsupprimer

Tout cela (ce copié/collé, de surcroît incomplet) me laisse plutôt coi (comme toujours dans de tels constats).
Bonne chance
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Et (toujours sans connaître VB.Net) :
Par ton code :
tu modifies la liste Lines alors que tu t'en sers par un for each
Ce n'est pas du tout ce que fait le code qui t'a été donné ailleurs, hein ...
Avec çà, c'est sur : l'opération d'énumération de cette liste est un peu plus que compromise.
Dors bien quand même.
Commenter la réponse de ucfoutu
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
0
Merci
Salut

Private Sub DebloquerSitesDangereux()
       Dim FichierSiteDangereux As String = ("C:Users\" & System.Environment.UserName & "DocumentsListeDeSiteContenusDangereux.txt")

       Dim lines As List(Of String) = System.IO.File.ReadAllLines("C:WindowsSystem32Driversetchosts").ToList

        Dim lignesAsupprimer As List(Of String) = System.IO.File.ReadAllLines(FichierSiteDangereux).ToList
        For Each item As String In lignesAsupprimer
            If  lines.Contains(item) Then
                lines.Remove(item)
            End If
        Next
    End Sub
Commenter la réponse de cs_ShayW
Messages postés
14565
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 octobre 2019
136
0
Merci
Si j'ai bien compris, ton problème est de lire un fichier, d'en supprimer les lignes présent dans un autre et de l'écrire ensuite ?

Je penses que ceci devrait te donner une piste :
Dim TabSrc ' Lignes sources
Dim TabBan ' Lignes à retirer
Dim lFinalTab=(From lLine in TabSrc Where not TabBan.Contains(lLine)).ToArray


Pour le reste, ReadAllLines et WriteAllLines devront te suffire.

On peut discuter avec celui qui sait.
On peut discuter avec celui qui ne sait pas.
On ne peut pas discuter avec celui qui croit savoir.
En VB.NET pensez à activer "Option Explicit" et "Option Strict"
Commenter la réponse de NHenry
0
Merci
Salut cs_ShayW,
je n'obtiens aucune erreur dans le code mais les lignes ne se suppriment toujours pas.

Salut NHenry,
voilà c'est ça, j'ai un fichier, je veux supprimer certaines lignes de ce fichier même à partir d'un autre fichier.
Commenter la réponse de Utilisateur anonyme
Messages postés
14565
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 octobre 2019
136
0
Merci
Avec ReadAllLines, tu récupères les lignes des 2 fichiers (puis tu les mets dans les tableaux adaptés de mon exemple)
La requête de LINQ se charge de faire le ménage
Puis avec WriteAllLines tu écrits le tableau résultat.

Sinon, expliques à quelle étape tu bloques.
Commenter la réponse de NHenry
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
0
Merci
Bizarre
j'ai bien testé les lignes chez moi sont supprimées de la liste lines

si tu lances pas à pas
le if
If  lines.Contains(item) Then
                lines.Remove(item)
            End If

est exécuté ?
Commenter la réponse de cs_ShayW
0
Merci
Bonjour NHenry,
j'ai essayé ton code et il y a une erreur sur la ligne
Dim TabSrc("C:WindowsSystem32Driversetchosts")
, il est impossible de transformer la chaine en integer.
ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212 -
C'est étrange, mais JE ne vois pas où NHenry (que je salue) aurait proposé cette ligne de code !
Montre !!!!
NHenry 5 oct. 2013 à 23:19
Si j'ai bien compris, ton problème est de lire un fichier, d'en supprimer les lignes présent dans un autre et de l'écrire ensuite ?

Je penses que ceci devrait te donner une piste :

Dim TabSrc ' Lignes sources
Dim TabBan ' Lignes à retirer
Dim lFinalTab=(From lLine in TabSrc Where not TabBan.Contains(lLine)).ToArray



Pour le reste, ReadAllLines et WriteAllLines devront te suffire.
NHenry
Messages postés
14565
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 octobre 2019
136 -
Oui, regardes Io.File.ReadAlllLines et WriteAllLines ...
Utilisateur anonyme -
C'est ce que j'ai fais, j'ai fais
IO.File.WriteAllLines(lFinalTab).tostring
NHenry
Messages postés
14565
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 octobre 2019
136 -
Pourquoi le ".ToString()" ?
Je pense que tu peux le virer.

Pourrais-tu montrer le code complet avec toutes les modifications qui ont été effectué depuis ?
Histoire de se remettre au même niveau.
Commenter la réponse de Utilisateur anonyme
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
0
Merci
Salut
Dim FichierSiteDangereux As String = ("C:Users\" & System.Environment.UserName & "DocumentsListeDeSiteContenusDangereux.txt")
  

' Lignes sources
Dim TabSrc() as string = System.IO.File.ReadAllLines("C:WindowsSystem32Driversetchosts")
 ' Lignes à retirer
Dim TabBan() as string = System.IO.File.ReadAllLines(FichierSiteDangereux)

Dim lFinalTab=(From lLine in TabSrc Where not TabBan.Contains(lLine)).ToArray
cs_ShayW
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46 -
bizarre
j'ai testé les deux méthodes celle d'NHenry ,la mienne
les deux marchent
donc le problème est autre part
Utilisateur anonyme -
Le code fonctionne sur votre fichier hosts ?
NHenry
Messages postés
14565
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 octobre 2019
136 -
Je pense que le fichier host est verrouillé, il faut peut être gérer les droits du fichier.
As-tu essayer de lancer ton prog "en tant qu'administrateur" ?
Utilisateur anonyme -
Effectivement ça fonctionne, l'écriture des sites étant très rapide, je pensais que c'était aussi rapide pour supprimer les sites.
Tout fonctionne à merveille, encore désolé pour le dérangement !
Voici donc le code :
        Dim lines As List(Of String) = System.IO.File.ReadAllLines("C:WindowsSystem32Driversetchosts").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:WindowsSystem32Driversetchosts", lines)


Merci encore !
cs_ShayW
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46 -
tant mieux
Commenter la réponse de cs_ShayW