Trouver une chaîne de caractère dans une autre, mais ne fonctionne pas toujours
1 réponse
Jean-Marc
Salut à toutes et à tous,
Dans une requête, je dois trouver une chaîne de caractères dans un champs.
La syntaxe est la suivante : nombre tiret nombre. Ex : 1-1 25-2
47-35
La majorité du temps, cette syntaxe est seule dans le champs, mais des fois
il y en a 2 séparés par une virgule. Ex 25-4,5-2 47-10,47-11
Si j'écris ceci, ça fonctionne à moitié :
Centroide: VraiFaux(DansChaîne([CENTROID]);[centrval])>0;[centrval];"")
Pourquoi à moitié ?
Si je mets 5-2, il va me sortir 5-2, mais aussi 25-2, 5-20, 25-20, ...
Je n'arrive pas à trouver la formule qui me permettrait d'extraire seulement
la chaîne exacte.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fabien
Salut à toutes et à tous,
Dans une requête, je dois trouver une chaîne de caractères dans un champs. La syntaxe est la suivante : nombre tiret nombre. Ex : 1-1 25-2 47-35 La majorité du temps, cette syntaxe est seule dans le champs, mais des fois il y en a 2 séparés par une virgule. Ex 25-4,5-2 47-10,47-11
Si j'écris ceci, ça fonctionne à moitié : Centroide: VraiFaux(DansChaîne([CENTROID]);[centrval])>0;[centrval];"") Pourquoi à moitié ? Si je mets 5-2, il va me sortir 5-2, mais aussi 25-2, 5-20, 25-20, ...
Je n'arrive pas à trouver la formule qui me permettrait d'extraire seulement la chaîne exacte.
Merci de vos z'avis z'avisés, Jean-Marc
Function dans_chaine(chaine,recherche as string) as string dim i as interger I=instr(1,chaine,recherche) 'On recherche la position de la chaine recherchée If I<>0 then 'Si ok if i=1 then 'et si en début de chaine If len(chaine)=len(recherche) then 'si les chaines sont les mêmes dans_chaine=recherche else 'sinon on test le caractére qui suit if left(chaine,I+len(recherche)+1)="," then 'si c'est une , ou pas Dans_chaine=Recherche else Dans_chaine="" end if end if else if left(chaine,I-1)="," then 'test si le caractére précédent est une , Dans_Chaine=Recherche else Dans_chaine = "" end if end if else Dans_chaine="" end if end func
Pas tester et à optimiser bien sur ;-)
Salut à toutes et à tous,
Dans une requête, je dois trouver une chaîne de caractères dans un champs.
La syntaxe est la suivante : nombre tiret nombre. Ex : 1-1 25-2
47-35
La majorité du temps, cette syntaxe est seule dans le champs, mais des fois
il y en a 2 séparés par une virgule. Ex 25-4,5-2 47-10,47-11
Si j'écris ceci, ça fonctionne à moitié :
Centroide: VraiFaux(DansChaîne([CENTROID]);[centrval])>0;[centrval];"")
Pourquoi à moitié ?
Si je mets 5-2, il va me sortir 5-2, mais aussi 25-2, 5-20, 25-20, ...
Je n'arrive pas à trouver la formule qui me permettrait d'extraire seulement
la chaîne exacte.
Merci de vos z'avis z'avisés,
Jean-Marc
Function dans_chaine(chaine,recherche as string) as string
dim i as interger
I=instr(1,chaine,recherche) 'On recherche la position de la chaine
recherchée
If I<>0 then 'Si ok
if i=1 then 'et si en début de chaine
If len(chaine)=len(recherche) then 'si les chaines sont les mêmes
dans_chaine=recherche
else 'sinon on test le caractére qui suit
if left(chaine,I+len(recherche)+1)="," then 'si c'est une , ou pas
Dans_chaine=Recherche
else
Dans_chaine=""
end if
end if
else
if left(chaine,I-1)="," then 'test si le caractére précédent est une ,
Dans_Chaine=Recherche
else
Dans_chaine = ""
end if
end if
else
Dans_chaine=""
end if
end func
Dans une requête, je dois trouver une chaîne de caractères dans un champs. La syntaxe est la suivante : nombre tiret nombre. Ex : 1-1 25-2 47-35 La majorité du temps, cette syntaxe est seule dans le champs, mais des fois il y en a 2 séparés par une virgule. Ex 25-4,5-2 47-10,47-11
Si j'écris ceci, ça fonctionne à moitié : Centroide: VraiFaux(DansChaîne([CENTROID]);[centrval])>0;[centrval];"") Pourquoi à moitié ? Si je mets 5-2, il va me sortir 5-2, mais aussi 25-2, 5-20, 25-20, ...
Je n'arrive pas à trouver la formule qui me permettrait d'extraire seulement la chaîne exacte.
Merci de vos z'avis z'avisés, Jean-Marc
Function dans_chaine(chaine,recherche as string) as string dim i as interger I=instr(1,chaine,recherche) 'On recherche la position de la chaine recherchée If I<>0 then 'Si ok if i=1 then 'et si en début de chaine If len(chaine)=len(recherche) then 'si les chaines sont les mêmes dans_chaine=recherche else 'sinon on test le caractére qui suit if left(chaine,I+len(recherche)+1)="," then 'si c'est une , ou pas Dans_chaine=Recherche else Dans_chaine="" end if end if else if left(chaine,I-1)="," then 'test si le caractére précédent est une , Dans_Chaine=Recherche else Dans_chaine = "" end if end if else Dans_chaine="" end if end func