Trouver plusieurs instances d'un même caractère dans un fichier texte.

Résolu
KokoJacK Messages postés 14 Date d'inscription dimanche 10 juillet 2005 Statut Membre Dernière intervention 31 janvier 2009 - 31 janv. 2009 à 21:09
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 - 1 févr. 2009 à 14:02
Bonjour à tous, voila mon titre explique déjà beaucoup ^^
Déjà j'ai été assez dégouté de ne pas trouver une fonction qui permet de faire cela.
Alors j'ai décider d'en faire une moi même à l'arrache pour faire un teste, j'optimiserai plus tard.

Private Sub Command1_Click()
Dim test As Integer
Dim test1 As Integer
Dim test2 As Integer
test1 = 1
test = 1
Do Until test = 0
test = InStr(test1, Text1.Text, "#")
test1 = test + 1
test2 = test2 + 1
Loop
MsgBox test2 - 1
End Sub

En gros il trouve le prochain caractère "#", puis réitère la fonction a cet emplacement + 1 jusqu'a ce qu'il n'y est plus de "#"

Tout content de moi, ça marche nickel dans ma textbox et dans des petits fichiers texte.
Seulement avec un gros fichier texte d'une 100 de ko, il me sort une erreur 6 de type overflow (je suppose qu'une fois compilé ça dois crasher)

Comment résoudre cette erreur ?

10 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
31 janv. 2009 à 22:12
Sans rien modifier en ce qui concerne la préférence à donner à la fonction spli.


Si, donc, il s'agit d'un exercice que tu t'imposes, voilà, en code, ce que je t'exposais plus haut :


 Dim cpt As Long '(pour le cas où tu aurais un très grand nombre de #
 Dim toto As String
 toto = Text1.Text
 Do While InStr(toto, "#")
   cpt = cpt + 1
   toto = Mid(toto, InStr(toto, "#") + 1)
 Loop
 MsgBox cpt
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
31 janv. 2009 à 21:32
Bonjour,

je me demande comment tu fais pour loger tout celà dans une textbox...

Mais bon ...
1) il est clair que si tu types en integer ta variable test (position à l'aide de Instr) elle n'aura que la limite d'un Integer ! Type-la en Long...!
2) Idem pour test2 (puisque test + 1


3) vaudra mieux typer en long également test2 (juste pour le cas où le nombre de tes # dépasserait lui aussi la limite d'un integer).


Essaye donc et tu verras.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 janv. 2009 à 21:41
salut,
tu as de l'overflow juste en cherchant avec "#" ?
ton texte n'est composé que de dièses?

désolé ton titre n'est pas suffisant!
tu veux quoi, compter les occurrences d'un caractère? celles de chaque caractère? leurs positions?

juste compter un seul... : MsgBox UBound(Split(Text1.Text, "#"))
les autres propositions sont présentes sur codyx.org
bonne soirée
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
31 janv. 2009 à 21:46
Comme dit jmf0, problème de type de variable

Integer = entier 16 bits signé soit pour valeur max 32767. C'est un peu juste pour compter jusqu'à 102400 (100ko)

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0

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

Posez votre question
KokoJacK Messages postés 14 Date d'inscription dimanche 10 juillet 2005 Statut Membre Dernière intervention 31 janvier 2009
31 janv. 2009 à 21:46
Je loge pas tout ça dans une textbox, j'ouvre le fichier avec fileopen mais la c'était juste pour essayer.

Mon texte contient exactement 4 # pour ça que je comprends pas qu'il y est overflow...
Je veux compter les occurrences du caractère # dans un fichier texte gros de 100ko
0
KokoJacK Messages postés 14 Date d'inscription dimanche 10 juillet 2005 Statut Membre Dernière intervention 31 janvier 2009
31 janv. 2009 à 21:53
Casy et jmf0 j'ai essayé de mettre en Long mais toujours la même erreur, ça dois venir de mon code :/ il ne doit pas aimer la loop...
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
31 janv. 2009 à 22:01
Si tu as mis les 3 variables en Long, je ne vois pas coment tu pourrais avoir un dépassement de capacité. Il faudrait que tu traite un texte de plus de 2Go, chose que de toute façon ne supporte pas le textbox.

--> J'ai fait le test, ça marche c'est moi

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
31 janv. 2009 à 22:02
La logique de ton code est bonne.
Ton mécanisme réinvente toutefois la roue (intéresse-toi, comme le suggère PCPT) à la fonction Split !
S'il s'agit toutefois d'un exercice que tu t'imposes :
Il n'est pas adroit d'utiliser instr, à chaque fois, sur toute la longueur de ta chaîne (ralentissements assurés).
Il vaut mieux, alors, soustraire à chaque fois de ta chaine celle qui précède le instr trouvé et réitérer sur la chaîne restante (donc de plus en plus courte). Un compteur est alors à utiliser.
0
KokoJacK Messages postés 14 Date d'inscription dimanche 10 juillet 2005 Statut Membre Dernière intervention 31 janvier 2009
31 janv. 2009 à 22:22
En effet casy ça ne me provoquer pas d'overflow mais vitesse d'execution beaucoup trop lente.
En revanche jmf0 ça marche très bien ^^ 50 fois plus rapide que mon code !

Merci à tous !
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
1 févr. 2009 à 14:02
Bonjour

Et le Split, ça donne quoi, du point de vue de la vitesse ?
0
Rejoignez-nous