KokoJacK
Messages postés14Date d'inscriptiondimanche 10 juillet 2005StatutMembreDernière intervention31 janvier 2009
-
31 janv. 2009 à 21:09
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 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 ?
A voir également:
Trouver plusieurs instances d'un même caractère dans un fichier texte.
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 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
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 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).
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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
KokoJacK
Messages postés14Date d'inscriptiondimanche 10 juillet 2005StatutMembreDernière intervention31 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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.
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 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.
KokoJacK
Messages postés14Date d'inscriptiondimanche 10 juillet 2005StatutMembreDernière intervention31 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 !