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

Résolu
Utilisateur anonyme - 5 oct. 2013 à 21:21
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 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 !

15 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 oct. 2013 à 21:27
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".
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 oct. 2013 à 21:29
0
Utilisateur anonyme
5 oct. 2013 à 21:30
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 oct. 2013 à 21:32
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).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 5/10/2013 à 21:40
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).
0
Utilisateur anonyme
5 oct. 2013 à 22:11
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 5/10/2013 à 22:35
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 oct. 2013 à 22:42
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.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
5 oct. 2013 à 22:46
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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
Modifié par NHenry le 5/10/2013 à 23:20
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"
0
Utilisateur anonyme
6 oct. 2013 à 00:05
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.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
6 oct. 2013 à 00:12
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.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 6/10/2013 à 00:39
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é ?
0
Utilisateur anonyme
7 oct. 2013 à 19:37
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
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 !!!!
0
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.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
7 oct. 2013 à 20:49
Oui, regardes Io.File.ReadAlllLines et WriteAllLines ...
0
Utilisateur anonyme
7 oct. 2013 à 21:06
C'est ce que j'ai fais, j'ai fais
IO.File.WriteAllLines(lFinalTab).tostring
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
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.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
7 oct. 2013 à 21:25
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
0
NHenry le code cs_ShayW ne contient pas d'erreur mais ne supprimer toujours pas les lignes, mais est-ce que ça marche chez vous ? C'est bizarre cette histoire quand même !
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
7 oct. 2013 à 21:36
As-tu retiré la protection en lecture seule du fichier host ? Par défaut, il est en lecture seule.

Ensuite WriteAllLines pend 2 paramètres, le nom du fichier et le tableau des lignes.
0
Utilisateur anonyme
7 oct. 2013 à 21:44
Oui la protection est retirée.
J'ai pourtant entré les bons paramètres.

        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

        IO.File.WriteAllLines(FichierSiteDangereux, lFinalTab)
0
Utilisateur anonyme
7 oct. 2013 à 21:46
En fait le fichier ne s'écrit pas car j'ai essayé :
        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

        IO.File.WriteAllLines("C:UsersClémentDesktoptest.txt", lFinalTab)

et aucun fichier n'est crée.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
7 oct. 2013 à 21:59
J'ai essayé :
        Dim lFinalTab = {"Test1", "Test2", "Test3", "Test4", "Test5", "Test6"}
        IO.File.WriteAllLines("Lecteur:DossierTestFaon.txt", lFinalTab)


Fichier créé directement.
Je suis sous XP, donc, peut être un problème de droit pour toi ?
0
Rejoignez-nous