Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Recherche dans une chaine de caractères

10 réponses
Avatar
Charles Tosi
Bonjour,

Le problème n'est pas nouveau et je suppose que, comme moi, beaucoup ont
écrit des routines qui permettent de rechercher et de trouver le nombre de
fois qu'un mot ou une combinaison de caractères est repoduit dans une chaine
de caractères de longueur variable. (ex combien de foie on trouve "TOTO"
dans une histoire de ... TOTO)

Je me demandais s'il ny avait pas une fonction existante dans VB qui fasse
cela de manière simple et automatique.

Merci de vos lumières

Charles

10 réponses

Avatar
LE TROLL
Salut, voici:

RECHERCHE du début vers la fin

position = InStr(depart, ch_examinée, élément_recherché,
option_recherche)

position = N° octet de début de chaîne recherchée
option_recherche
-1 en l'état (defaut)
0 binaire
1 textuel

RECHERCHE de la fin vers le début

position = InStrRev(ch_examinée, élément_recherché, depart,
option_recherche)

depart = (-1) = fin de chaîne
position = N° octet de début de chaîne recherchée
option_recherche
-1 en l'état (defaut)
0 binaire
1 textuel
2 bdd Access
---------------------

"Charles Tosi" a écrit dans le message de
news:
Bonjour,

Le problème n'est pas nouveau et je suppose que, comme
moi, beaucoup ont écrit des routines qui permettent de
rechercher et de trouver le nombre de fois qu'un mot ou
une combinaison de caractères est repoduit dans une chaine
de caractères de longueur variable. (ex combien de foie on
trouve "TOTO" dans une histoire de ... TOTO)

Je me demandais s'il ny avait pas une fonction existante
dans VB qui fasse cela de manière simple et automatique.

Merci de vos lumières

Charles





Avatar
Charles Tosi
Merci de votre réponse
j'utilise effectivement cette fonction qui ne donne que la position du 1er
élément recherché dans la chaine. Aprés ça je m'échine à indexer et avancer
dans la recherche en faisant varier la position de départ de la rcherche
dans la chaine etc...
Je me demandais seulement s'il y avait une fonction qui me donne le nombre
d'occurrences de "élément-recherché" dans "ch_examinée" automatiquement

"LE TROLL" <le a écrit dans le message de news:

Salut, voici:

RECHERCHE du début vers la fin

position = InStr(depart, ch_examinée, élément_recherché, option_recherche)

position = N° octet de début de chaîne recherchée
option_recherche
-1 en l'état (defaut)
0 binaire
1 textuel

RECHERCHE de la fin vers le début

position = InStrRev(ch_examinée, élément_recherché, depart,
option_recherche)

depart = (-1) = fin de chaîne
position = N° octet de début de chaîne recherchée
option_recherche
-1 en l'état (defaut)
0 binaire
1 textuel
2 bdd Access
---------------------

"Charles Tosi" a écrit dans le message de news:

Bonjour,

Le problème n'est pas nouveau et je suppose que, comme moi, beaucoup ont
écrit des routines qui permettent de rechercher et de trouver le nombre
de fois qu'un mot ou une combinaison de caractères est repoduit dans une
chaine de caractères de longueur variable. (ex combien de foie on trouve
"TOTO" dans une histoire de ... TOTO)

Je me demandais s'il ny avait pas une fonction existante dans VB qui
fasse cela de manière simple et automatique.

Merci de vos lumières

Charles









Avatar
LE TROLL
Ben, en faisant une boucle simplement, tu auras le nombre...

------------

"Charles Tosi" a écrit dans le message de
news: %
Merci de votre réponse
j'utilise effectivement cette fonction qui ne donne que la
position du 1er élément recherché dans la chaine. Aprés ça
je m'échine à indexer et avancer dans la recherche en
faisant varier la position de départ de la rcherche dans
la chaine etc...
Je me demandais seulement s'il y avait une fonction qui me
donne le nombre d'occurrences de "élément-recherché" dans
"ch_examinée" automatiquement

"LE TROLL" <le a écrit dans le message de
news:
Salut, voici:

RECHERCHE du début vers la fin

position = InStr(depart, ch_examinée, élément_recherché,
option_recherche)

position = N° octet de début de chaîne recherchée
option_recherche
-1 en l'état (defaut)
0 binaire
1 textuel

RECHERCHE de la fin vers le début

position = InStrRev(ch_examinée, élément_recherché,
depart, option_recherche)

depart = (-1) = fin de chaîne
position = N° octet de début de chaîne recherchée
option_recherche
-1 en l'état (defaut)
0 binaire
1 textuel
2 bdd Access
---------------------

"Charles Tosi" a écrit dans le message
de news:
Bonjour,

Le problème n'est pas nouveau et je suppose que, comme
moi, beaucoup ont écrit des routines qui permettent de
rechercher et de trouver le nombre de fois qu'un mot ou
une combinaison de caractères est repoduit dans une
chaine de caractères de longueur variable. (ex combien
de foie on trouve "TOTO" dans une histoire de ... TOTO)

Je me demandais s'il ny avait pas une fonction existante
dans VB qui fasse cela de manière simple et automatique.

Merci de vos lumières

Charles













Avatar
Charles Tosi
Ben comme ça on invente le mouvement perpetuel et la magie du CTRL-ALT-DEL
il faut déplacer la position initiale de recherche en récupérant la longueur
de la chaine qui sépare 2 occurences et puis verifier qu'on ne dépasse pas
le bout de la chaine .... tout ça ça fait une boucle que je pratique, merci

S'il y avait qqch qui dirait nombre de fois InSTr par ex ça serait plus
simple



"LE TROLL" <le a écrit dans le message de news:

Ben, en faisant une boucle simplement, tu auras le nombre...

------------

"Charles Tosi" a écrit dans le message de news:
%
Merci de votre réponse
j'utilise effectivement cette fonction qui ne donne que la position du
1er élément recherché dans la chaine. Aprés ça je m'échine à indexer et
avancer dans la recherche en faisant varier la position de départ de la
rcherche dans la chaine etc...
Je me demandais seulement s'il y avait une fonction qui me donne le
nombre d'occurrences de "élément-recherché" dans "ch_examinée"
automatiquement

"LE TROLL" <le a écrit dans le message de news:

Salut, voici:

RECHERCHE du début vers la fin

position = InStr(depart, ch_examinée, élément_recherché,
option_recherche)

position = N° octet de début de chaîne recherchée
option_recherche
-1 en l'état (defaut)
0 binaire
1 textuel

RECHERCHE de la fin vers le début

position = InStrRev(ch_examinée, élément_recherché, depart,
option_recherche)

depart = (-1) = fin de chaîne
position = N° octet de début de chaîne recherchée
option_recherche
-1 en l'état (defaut)
0 binaire
1 textuel
2 bdd Access
---------------------

"Charles Tosi" a écrit dans le message de news:

Bonjour,

Le problème n'est pas nouveau et je suppose que, comme moi, beaucoup
ont écrit des routines qui permettent de rechercher et de trouver le
nombre de fois qu'un mot ou une combinaison de caractères est repoduit
dans une chaine de caractères de longueur variable. (ex combien de foie
on trouve "TOTO" dans une histoire de ... TOTO)

Je me demandais s'il ny avait pas une fonction existante dans VB qui
fasse cela de manière simple et automatique.

Merci de vos lumières

Charles

















Avatar
LE TROLL
Désolé, je ne sais pas si çan existe, je n'ai jamais employé
:o)
------------

"Charles Tosi" a écrit dans le message de
news:
Ben comme ça on invente le mouvement perpetuel et la magie
du CTRL-ALT-DEL
il faut déplacer la position initiale de recherche en
récupérant la longueur de la chaine qui sépare 2
occurences et puis verifier qu'on ne dépasse pas le bout
de la chaine .... tout ça ça fait une boucle que je
pratique, merci

S'il y avait qqch qui dirait nombre de fois InSTr par ex
ça serait plus simple



"LE TROLL" <le a écrit dans le message de
news:
Ben, en faisant une boucle simplement, tu auras le
nombre...

------------

"Charles Tosi" a écrit dans le message
de news: %
Merci de votre réponse
j'utilise effectivement cette fonction qui ne donne que
la position du 1er élément recherché dans la chaine.
Aprés ça je m'échine à indexer et avancer dans la
recherche en faisant varier la position de départ de la
rcherche dans la chaine etc...
Je me demandais seulement s'il y avait une fonction qui
me donne le nombre d'occurrences de "élément-recherché"
dans "ch_examinée" automatiquement

"LE TROLL" <le a écrit dans le message
de news:
Salut, voici:

RECHERCHE du début vers la fin

position = InStr(depart, ch_examinée,
élément_recherché, option_recherche)

position = N° octet de début de chaîne recherchée
option_recherche
-1 en l'état (defaut)
0 binaire
1 textuel

RECHERCHE de la fin vers le début

position = InStrRev(ch_examinée, élément_recherché,
depart, option_recherche)

depart = (-1) = fin de chaîne
position = N° octet de début de chaîne recherchée
option_recherche
-1 en l'état (defaut)
0 binaire
1 textuel
2 bdd Access
---------------------

"Charles Tosi" a écrit dans le
message de news:

Bonjour,

Le problème n'est pas nouveau et je suppose que, comme
moi, beaucoup ont écrit des routines qui permettent de
rechercher et de trouver le nombre de fois qu'un mot
ou une combinaison de caractères est repoduit dans une
chaine de caractères de longueur variable. (ex combien
de foie on trouve "TOTO" dans une histoire de ...
TOTO)

Je me demandais s'il ny avait pas une fonction
existante dans VB qui fasse cela de manière simple et
automatique.

Merci de vos lumières

Charles





















Avatar
Alain CROS
Bonjour.

Sub test()
Dim LaChaine$, Occur
LaChaine = "Toto va bien, il va tres bien Toto, eh Toto!"
Occur = Split(LaChaine, "Toto")
MsgBox UBound(Occur)
End Sub

Alain CROS

"Charles Tosi" a écrit dans le message de news:
| Bonjour,
|
| Le problème n'est pas nouveau et je suppose que, comme moi, beaucoup ont
| écrit des routines qui permettent de rechercher et de trouver le nombre de
| fois qu'un mot ou une combinaison de caractères est repoduit dans une chaine
| de caractères de longueur variable. (ex combien de foie on trouve "TOTO"
| dans une histoire de ... TOTO)
|
| Je me demandais s'il ny avait pas une fonction existante dans VB qui fasse
| cela de manière simple et automatique.
|
| Merci de vos lumières
|
| Charles
|
|
|
Avatar
Charles Tosi
Merci infiniment, je savais qu'il devait y avoir une solution biblique à mon
problème


"Alain CROS" a écrit dans le message de news:
%
Bonjour.

Sub test()
Dim LaChaine$, Occur
LaChaine = "Toto va bien, il va tres bien Toto, eh Toto!"
Occur = Split(LaChaine, "Toto")
MsgBox UBound(Occur)
End Sub

Alain CROS

"Charles Tosi" a écrit dans le message de news:

| Bonjour,
|
| Le problème n'est pas nouveau et je suppose que, comme moi, beaucoup ont
| écrit des routines qui permettent de rechercher et de trouver le nombre
de
| fois qu'un mot ou une combinaison de caractères est repoduit dans une
chaine
| de caractères de longueur variable. (ex combien de foie on trouve "TOTO"
| dans une histoire de ... TOTO)
|
| Je me demandais s'il ny avait pas une fonction existante dans VB qui
fasse
| cela de manière simple et automatique.
|
| Merci de vos lumières
|
| Charles
|
|
|




Avatar
Driss HANIB
Un autre façon est d'utiliser la fonction replace

NouvChaine = Replace(maChaine,"Toto","")
Nb = (Len(Machaine)-Len(NouvChaine))/len("Toto")

Driss

"Charles Tosi" a écrit dans le message de
news:
Bonjour,

Le problème n'est pas nouveau et je suppose que, comme moi, beaucoup ont
écrit des routines qui permettent de rechercher et de trouver le nombre de
fois qu'un mot ou une combinaison de caractères est repoduit dans une


chaine
de caractères de longueur variable. (ex combien de foie on trouve "TOTO"
dans une histoire de ... TOTO)

Je me demandais s'il ny avait pas une fonction existante dans VB qui fasse
cela de manière simple et automatique.

Merci de vos lumières

Charles





Avatar
Jean-Marc
Hello,

rien de "biblique" dans la solution de Charles, et surtout
terriblment lent. Il ne sert à rien de faire une opération
compliquée de Split() pour un simple comptage.

La solution suivante est beaucoup plus adaptée, et surtout
elle est 3,6 fois plus rapide:

Private Function CompteMalin(s As String, pat As String) As Long
Dim p As Long
Dim nb As Long

p = InStr(s, pat)
While p
nb = nb + 1
p = InStr(p + 1, s, pat)
Wend
CompteMalin = nb
End Function

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;


"Charles Tosi" a écrit dans le message de
news:uk%
Merci infiniment, je savais qu'il devait y avoir une solution biblique à


mon
problème


"Alain CROS" a écrit dans le message de news:
%
> Bonjour.
>
> Sub test()
> Dim LaChaine$, Occur
> LaChaine = "Toto va bien, il va tres bien Toto, eh Toto!"
> Occur = Split(LaChaine, "Toto")
> MsgBox UBound(Occur)
> End Sub
>
> Alain CROS
>
> "Charles Tosi" a écrit dans le message de news:
>
> | Bonjour,
> |
> | Le problème n'est pas nouveau et je suppose que, comme moi, beaucoup


ont
> | écrit des routines qui permettent de rechercher et de trouver le


nombre
> de
> | fois qu'un mot ou une combinaison de caractères est repoduit dans une
> chaine
> | de caractères de longueur variable. (ex combien de foie on trouve


"TOTO"
> | dans une histoire de ... TOTO)
> |
> | Je me demandais s'il ny avait pas une fonction existante dans VB qui
> fasse
> | cela de manière simple et automatique.
> |
> | Merci de vos lumières
> |
> | Charles
> |
> |
> |
>
>




Avatar
Charles Tosi
Astuce quand tu nous tiens!
j'avais pas pensé au "p+1" qui suffit à relancer la recherche dans la chaine

Merci

"Jean-Marc" a écrit dans le message de news:
42c58bf5$0$329$
Hello,

rien de "biblique" dans la solution de Charles, et surtout
terriblment lent. Il ne sert à rien de faire une opération
compliquée de Split() pour un simple comptage.

La solution suivante est beaucoup plus adaptée, et surtout
elle est 3,6 fois plus rapide:

Private Function CompteMalin(s As String, pat As String) As Long
Dim p As Long
Dim nb As Long

p = InStr(s, pat)
While p
nb = nb + 1
p = InStr(p + 1, s, pat)
Wend
CompteMalin = nb
End Function

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;


"Charles Tosi" a écrit dans le message de
news:uk%
Merci infiniment, je savais qu'il devait y avoir une solution biblique à


mon
problème


"Alain CROS" a écrit dans le message de news:
%
> Bonjour.
>
> Sub test()
> Dim LaChaine$, Occur
> LaChaine = "Toto va bien, il va tres bien Toto, eh Toto!"
> Occur = Split(LaChaine, "Toto")
> MsgBox UBound(Occur)
> End Sub
>
> Alain CROS
>
> "Charles Tosi" a écrit dans le message de news:
>
> | Bonjour,
> |
> | Le problème n'est pas nouveau et je suppose que, comme moi, beaucoup


ont
> | écrit des routines qui permettent de rechercher et de trouver le


nombre
> de
> | fois qu'un mot ou une combinaison de caractères est repoduit dans une
> chaine
> | de caractères de longueur variable. (ex combien de foie on trouve


"TOTO"
> | dans une histoire de ... TOTO)
> |
> | Je me demandais s'il ny avait pas une fonction existante dans VB qui
> fasse
> | cela de manière simple et automatique.
> |
> | Merci de vos lumières
> |
> | Charles
> |
> |
> |
>
>