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

CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 5 oct. 2013 à 21:21 - Dernière réponse : cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention
- 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

30 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 5 oct. 2013 à 21:27
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 5 oct. 2013 à 21:29
Commenter la réponse de ucfoutu
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 5 oct. 2013 à 21:30
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 5 oct. 2013 à 21:32
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 5/10/2013 à 21:40
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
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 5 oct. 2013 à 22:11
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 5/10/2013 à 22:35
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
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 5 oct. 2013 à 22:42
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
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 5 oct. 2013 à 22: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
NHenry 14273 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - Modifié par NHenry le 5/10/2013 à 23:20
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
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 6 oct. 2013 à 00:05
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
NHenry 14273 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - 6 oct. 2013 à 00:12
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
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - Modifié par cs_ShayW le 6/10/2013 à 00:39
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
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 7 oct. 2013 à 19:37
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 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 7 oct. 2013 à 20:15
C'est étrange, mais JE ne vois pas où NHenry (que je salue) aurait proposé cette ligne de code !
Montre !!!!
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 7 oct. 2013 à 20:27
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 14273 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - 7 oct. 2013 à 20:49
Oui, regardes Io.File.ReadAlllLines et WriteAllLines ...
CLeBeR_FR 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 7 oct. 2013 à 21:06
C'est ce que j'ai fais, j'ai fais
IO.File.WriteAllLines(lFinalTab).tostring
NHenry 14273 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - 7 oct. 2013 à 21:15
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
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 7 oct. 2013 à 21:25
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 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 7 oct. 2013 à 22:09
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 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 7 oct. 2013 à 22:10
Le code fonctionne sur votre fichier hosts ?
NHenry 14273 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 16 octobre 2018 Dernière intervention - 7 oct. 2013 à 22:15
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 301 Messages postés mercredi 22 septembre 2010Date d'inscription 27 février 2018 Dernière intervention - 7 oct. 2013 à 22:22
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 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 7 oct. 2013 à 22:42
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.