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

Messages postés
301
Date d'inscription
mercredi 22 septembre 2010
Dernière intervention
27 février 2018
- - Dernière réponse : cs_ShayW
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 décembre 2018
- 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 

Votre réponse

15 réponses

Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
259
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
Contributeur
Dernière intervention
11 avril 2018
259
Commenter la réponse de ucfoutu
Messages postés
301
Date d'inscription
mercredi 22 septembre 2010
Dernière intervention
27 février 2018
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 CLeBeR_FR
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
259
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
Contributeur
Dernière intervention
11 avril 2018
259
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
Messages postés
301
Date d'inscription
mercredi 22 septembre 2010
Dernière intervention
27 février 2018
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 CLeBeR_FR
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
259
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
Contributeur
Dernière intervention
11 avril 2018
259
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
3247
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 décembre 2018
51
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
14356
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2019
365
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
Messages postés
301
Date d'inscription
mercredi 22 septembre 2010
Dernière intervention
27 février 2018
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 CLeBeR_FR
Messages postés
14356
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2019
365
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
3247
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 décembre 2018
51
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
Messages postés
301
Date d'inscription
mercredi 22 septembre 2010
Dernière intervention
27 février 2018
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
Contributeur
Dernière intervention
11 avril 2018
259 -
C'est étrange, mais JE ne vois pas où NHenry (que je salue) aurait proposé cette ligne de code !
Montre !!!!
CLeBeR_FR
Messages postés
301
Date d'inscription
mercredi 22 septembre 2010
Dernière intervention
27 février 2018
-
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
14356
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2019
365 -
Oui, regardes Io.File.ReadAlllLines et WriteAllLines ...
CLeBeR_FR
Messages postés
301
Date d'inscription
mercredi 22 septembre 2010
Dernière intervention
27 février 2018
-
C'est ce que j'ai fais, j'ai fais
IO.File.WriteAllLines(lFinalTab).tostring
NHenry
Messages postés
14356
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2019
365 -
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 CLeBeR_FR
Messages postés
3247
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 décembre 2018
51
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
3247
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 décembre 2018
51 -
bizarre
j'ai testé les deux méthodes celle d'NHenry ,la mienne
les deux marchent
donc le problème est autre part
CLeBeR_FR
Messages postés
301
Date d'inscription
mercredi 22 septembre 2010
Dernière intervention
27 février 2018
-
Le code fonctionne sur votre fichier hosts ?
NHenry
Messages postés
14356
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2019
365 -
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" ?
CLeBeR_FR
Messages postés
301
Date d'inscription
mercredi 22 septembre 2010
Dernière intervention
27 février 2018
-
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
3247
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
26 décembre 2018
51 -
tant mieux
Commenter la réponse de cs_ShayW

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.