IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Contribuez Discussion :

[FAQ] compter les occurences d'une chaîne dans un fichier [Fait]


Sujet :

Contribuez

  1. #1
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut [FAQ] compter les occurences d'une chaîne dans un fichier
    C'est faisable grâce aux RegExp, penser à ajouter la référence Microsoft Regular Expressions 5.5 :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Function CountMatches(ByVal strFic As String, ByVal strSearch As String) As Long
    
        Dim reg As VBScript_RegExp_55.RegExp
        Dim Matches As VBScript_RegExp_55.MatchCollection
        Dim Fic As Integer
        Dim strBuff As String * 20000
        Dim strBorder As String
        
        ' instanciation
    
        Set reg = New VBScript_RegExp_55.RegExp
        
        reg.Global = True
        reg.IgnoreCase = True
        reg.Multiline = True
        reg.Pattern = "(" & strSearch & ")"
    
        ' gestion fichier
    
        Reset
        Fic = FreeFile
        Open strFic For Binary Access Read As #Fic
        
        Do While Not EOF(Fic)
            strBorder = Right(strBuff, Len(strSearch) - 1)
            Get #Fic, , strBuff
            strBorder = strBorder & strBuff
            Set Matches = reg.Execute(strBorder)
            CountMatches = CountMatches + Matches.Count
        Loop
        Close #Fic
            
        ' libération
    
        Set reg = Nothing
        Set Matches = Nothing
    
    End Function
    un exemple d'utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ?countmatches("c:\temp\long.txt"," ")
     7500
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Avec l'utilisation de FreeFile pour le nom de fichier, on serait sûr de ne pas lever d'erreur en cas de lecture d'un autre fichier entre temps

    Sinon question, les regexp sont vraiment plus rapide que InStr dans ce cas ?

  3. #3
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Citation Envoyé par Tofalu
    Avec l'utilisation de FreeFile pour le nom de fichier, on serait sûr de ne pas lever d'erreur en cas de lecture d'un autre fichier entre temps

    Sinon question, les regexp sont vraiment plus rapide que InStr dans ce cas ?
    Hello,

    J'ai corrigé en mettant FreeFile, judicieuse remarque.

    j'ai testé les performances, pour que Instr soit intéressant il faut réduire fortement la taille du buffer.

    Fichier = 1.3 Mo
    Instr = 0,304 s (avec buffer à 100 car.)
    RegEx = 0,179 s

    Fichier = 2.7 Mo
    Instr = 0,601 s (avec buffer à 100 car.)
    RegEx = 0,347 s

    Fichier = 16 Mo
    Instr = 3.715 s
    RegEx = 2.094 s (buffer à 2500 car.)

    En gros les RegEx sont deux fois plus rapides avec des possibilités de recherches nettement plus étendues !
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Cool

Discussions similaires

  1. Compter les occurrences d'une chaîne dans une feuille
    Par Daejung dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/11/2008, 08h59
  2. Compter les occurences d'un champ dans un fichier txt
    Par JeuneJavaiste dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 10/11/2008, 07h52
  3. Compter les occurences d'un mot dans une chaîne
    Par mimi2311 dans le forum Pascal
    Réponses: 4
    Dernier message: 20/04/2008, 22h37
  4. Compter les occurences d'un car dans une chaine/variable
    Par sherlockfr dans le forum Windows
    Réponses: 2
    Dernier message: 10/11/2005, 07h48
  5. [TestStand] Compter les éléments d'une chaîne de caractères
    Par capblans dans le forum Autres langages
    Réponses: 2
    Dernier message: 29/04/2005, 09h29

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