|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : août 2009 Messages : 103 ![]() |
bonjour,
voila je vous explique mon problème, je dois créer une petite procédure qui va analyser mes log. Pour cela, je dois récupérer un champ ident (numbe)r qui est present dans le message log. Cet ident selon les messages se trouvent à différentes positions dans la chaine. J'essaie de savoir si il existe des fonctions capable de connaitre la position et la longueur d'un nombre au sein d'une chaine de caractère (par exemple 4455 ds la chaine 'stop erreur client 4455 ne possedepas ....') afin de l'extraire. Merci pour votre aide |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Oui, mais tout dépend de la composition de la chaine.
S'il n'y a qu'un seul nombre (et pas plusieurs disséminés dans la chaine), un double translate fera l'affaire. 1er translate pour enlever tous les chiffres, et le second appliqué au résultat pour enlever tous les non-chiffres Ca doit ressembler à quelque chose comme ça : Code :
TRANSLATE(v_chaine, '0' ||TRANSLATE(v_chaine, 'a0123456789','a'), '0') On peut vérifier autrement en L/Rtrim-ant les non-chiffres. Code :
RTRIM(LTRIM(v_chaine, TRANSLATE(v_chaine, 'a0123456789', 'a')), TRANSLATE(v_chaine, 'a0123456789', 'a')) Code :
LTRIM(souschaine, '0123456789') IS NULL AND souschaine IS NOT NULL
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : août 2009 Messages : 103 ![]() |
merci pour la réponse.
par contre je pense qu'il y aura plusieurs nombres dans cette chaine et du coup il faudra en effet que je récupère le premier. merci |
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : août 2009 Messages : 103 ![]() |
pas d'idée pour récupérer uniquement le premier nombre d'une chaine composée de plusieurs nombres.
merci |
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Je te donne la façon de faire, à toi de coder maintenant
Avec la 2nde méthode utilisant R et LTRIM (tu n'as besoin que du ltrim), tu obtiens la souschaine à partir du premier nombre. Avec cette souschaine, tu peux éliminer les premiers chiffres, et avec la différence de taille de chaine, tu peux donc trouver où s'arrête le premier nombre. Il ne reste plus qu'à faire un substr pour récupérer ce premier nombre.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Code :
|
||
|
|
10
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 437 ![]() |
Et s'il y a plusieurs nombres ? (J'ai pas de base 10, donc je ne peux pas tester regexp)
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#8 | |||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Citation:
Code :
|
|||
|
|
10
|
Copyright © 2000-2012 - www.developpez.com