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

  1. #1
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    février 2006
    Messages
    1 166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2006
    Messages : 1 166
    Points : 3 092
    Points
    3 092

    Par défaut Supprimer une/des ligne(s) d'un fichier texte contenant un texte précis

    bonjour,

    en suite d'une discussion récente, vous trouverez ci-dessous une fonction DelLines qui supprime une ou n lignes de texte en fonction de son contenu
    il est également possible de restreindre le critère au début ou fin de ligne
    comme il n'utilise pas de boucle de concaténation de chaines, le code est compact et très rapide même avec plusieurs milliers de lignes
    c'est un exemple méconnu de la fonction native Filter

    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
    16
    17
    18
    Dim ContenuFichier
    ContenuFichier = "8;Vallet;Esteban" & vbNewLine & _
                     "1;Her;Bruno" & vbNewLine & _
                     "2;leGros;Henri7" & vbNewLine & _
                     "3;Petitgros2;Michel" & vbNewLine & _
                     "5;Vito;Abdoulaye"
     
    ' Tag : chaine recherchée dans la ligne à supprimer
    ' Pos : 0 -> position de Tag est libre
    ' Pos : 1 -> Tag est en début de ligne
    ' Pos : 2 -> Tag est en fin de ligne
    Function DelLines(source,tag,pos)
    	Dim dlm : dlm = Array(vbNewLine,"","",vbCr,vbLf,"",vbLf,"",vbCr)
    	DelLines = Join(Filter(Split(source,dlm(3 * pos)),dlm(3 * pos + 1) & tag & dlm(3 * pos + 2),False),dlm(3 * pos))
    End Function
    MsgBox DelLines(ContenuFichier,"2;",0)
    MsgBox DelLines(ContenuFichier,"2;",1)
    MsgBox DelLines(ContenuFichier,"uno",2)
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  2. #2
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 662
    Points : 10 267
    Points
    10 267

    Par défaut

    Salut



    Citation Envoyé par omen999 Voir le message
    bonjour,
    ......
    c'est un exemple méconnu de la fonction native Filter
    ......
    Comme tu le dis, le fait de ne pas boucler sur chaque ligne et de ne pas concaténer, c'est super rapide.
    Ben moi c'était une vraie découverte, ce qui fait que je me suis amusé à faire ceci
    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
    16
    Option explicit
    Dim ContenuFichier 'pour simuler le contenu d'un fichier texte
    ContenuFichier ="Une histoire, pour vérifier une autre utilisation." & vbnewline & _
                    "Pourquoi ne pas essayer d'éliminer une ligne. Celle-ci définit par un POINT et non pas par un retour à la ligne." & vbnewline & _
                    "Pour l'exemple, élimination de deux lignes contenant les mots ""A que coucou""." & vbnewline & _
                    "Il n'y a pas de raison pour que cela ne fonctionne pas." & vbnewline & _
                    "Cette ligne va aussi être éliminée car elle contient A que coucou, si la formule est Ok."
     
    Dim MotRec,NewContenuFichier
    MotRec = "A que coucou"
    NewContenuFichier = Join(Filter(Split(ContenuFichier,"."),MotRec,False),".")
    'pour debeug
    MsgBox "ContenuFichier : (la simulation d'un fichier)" & vbnewline & vbnewline & ContenuFichier & vbnewline & vbnewline & _
           "---------------------------------------------------------------------------------------" & vbnewline & vbnewline & _
           "Le resultat," & _
           " NewContenuFichier contient maintenant:" & vbnewline & vbnewline & NewContenuFichier,vbOKOnly,"---- Démonstration ----"
    ProgElecT
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.

Discussions similaires

  1. Supprimer des lignes vides dans un fichier
    Par Cj_Dal dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 09/07/2013, 21h58
  2. supprimer une certaine ligne d'un fichier
    Par morphemia dans le forum Langage
    Réponses: 1
    Dernier message: 10/11/2011, 21h35
  3. Supprimer des lignes spécifiques d'un fichier
    Par Noirham dans le forum Langage
    Réponses: 4
    Dernier message: 20/06/2011, 17h50
  4. Réponses: 4
    Dernier message: 26/07/2007, 12h35
  5. Extraire des lignes precises d'un fichier
    Par keke33 dans le forum IO
    Réponses: 9
    Dernier message: 03/06/2004, 11h52

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