Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/07/2006, 08h52   #1
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 882
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 882
Points : 4 500
Points : 4 500
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 :
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 :
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

Développez une application de gestion des comptes bancaires dans Access de A à Z
Déjà 12 tutoriels, le dernier en date : Comment faire un TextBox auto-extensible dans un formulaire ?


cafeine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2006, 09h34   #2
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
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 ?
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2006, 10h41   #3
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 882
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 882
Points : 4 500
Points : 4 500
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

Développez une application de gestion des comptes bancaires dans Access de A à Z
Déjà 12 tutoriels, le dernier en date : Comment faire un TextBox auto-extensible dans un formulaire ?


cafeine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2006, 11h21   #4
Rédacteur

 
Avatar de Tofalu
 
Christophe Warin
Inscription : octobre 2004
Messages : 8 635
Détails du profil
Informations personnelles :
Nom : Christophe Warin
Âge : 28

Informations forums :
Inscription : octobre 2004
Messages : 8 635
Points : 13 718
Points : 13 718
Cool
Tofalu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h48.


 
 
 
 
Partenaires

Hébergement Web