Page 1 sur 2
Retourner le Nième entier numérique depuis une chaîne
Publié : lun. 12/sept./2016 22:31
par Ollivier
Code : Tout sélectionner
Procedure.S Digit(Text.S, n)
Define Number.S
For I = 1 To Len(Text + " ")
A = Asc(Mid(Text, I, 1) )
OldDigit = Digit
If (A > 47) And (A < 58)
Digit = 1
If Not OldDigit
nb + 1
EndIf
Number + Chr(A)
Else
Digit = 0
If OldDigit
If nb = n
ProcedureReturn Number
EndIf
Number = ""
EndIf
EndIf
Next
EndProcedure
Re: Retourner le Nième entier numérique depuis une chaîne
Publié : lun. 12/sept./2016 23:17
par falsam
Un debug de l'appel à la fonction ne me donne rien. Aurais tu un exemple ? Merci.
Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mar. 13/sept./2016 10:24
par MLD
Salut Ollivier
Perso j'aurai fait comme ceci
Code : Tout sélectionner
Procedure.s Digit2(Text.s,n)
Digit = 0 : Dp = 0
For I = 1 To Len(Text.s)
A = Asc(Mid(Text, I, 1))
If (A > 47) And (A < 58)
Digit = Digit +1
If Digit = n
Dp =1
ProcedureReturn Chr(A)
EndIf
EndIf
Next
If Dp = 0
ProcedureReturn ""
EndIf
EndProcedure
Debug Digit2("ac123sd45", 4)
Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mar. 13/sept./2016 11:54
par Ollivier
@MLD
Ton algo donne le Nième chiffre présent dans une chaîne.
Le mien donne le Nième nombre entier présent dans une chaîne.
Exemple :
Dans "J'ai 21 doigts sur moi. Le plus court fait 24 millimètres."
Si tu mets 1 en 2nd argument, tu obtiendras "21".
Si tu mets 2, tu obtiendras "24".
Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mar. 13/sept./2016 12:23
par Zorro
moi j'aurai fait comme ça
Code : Tout sélectionner
Declare.s digit_by_zorro(text.s)
a.s= "J'ai 21 doigts sur moi. Le plus court fait 24 millimètres."
debug a.s
debug "nombre ressortis :"
Debug digit_by_zorro(a.s)
Debug digit_by_zorro(a.s)
Procedure.s digit_by_zorro(Text.S)
; By Zorro
static pos
if pos=0:pos=1:Else:Pos=pos+1
endif
ref.s="0,1,2,3,4,5,6,7,8,9"
For i=pos to CountString(Text.S," ")
extrait.s=StringField(Text.s,i," ")
For b=1 to 9
if FindString(extrait.s,StringField(ref.s,b,","))>0
pos=i
ProcedureReturn StringField(Text.s,pos," ")
Endif
Next b
Next i
EndProcedure
Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mar. 13/sept./2016 12:35
par Kwai chang caine
Celui qui ne sait pas que le code est de toi, il est pas tres observateur

Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mar. 13/sept./2016 12:38
par Zorro
Kwai chang caine a écrit :Celui qui ne sait pas que le code est de toi, il est pas tres observateur

c'est clair !

le code est de MOA !!!
il y a une explication a tout ça

je suis tellement épaté d'arriver a faire un truc, que du coup je me sent obligé de bien le dire
probablement un grand manque de confiance en moi , peut etre liée a mon actualitée ..
lorsqu'on doute de votre personne, vous en venez a chercher des bases a quoi se raccrocher, ça rassure
Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mar. 13/sept./2016 14:39
par Micoute
Comme je te comprend !
Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mar. 13/sept./2016 15:14
par MLD
Ollivier ok
Zorro Si l'entier touche une lettre ton algo ne fonctionne pas
Code : Tout sélectionner
Procedure.s Digit3(text.s,n)
Dim tabentier.s(0)
For z = 1 To Len(text.s)
A = Asc(Mid(text,z,1))
If (A > 47) And (A < 58)
dp =0
c$ = tabentier.s(ArraySize(tabentier.s())) + Chr(A)
b = ArraySize(tabentier.s())
tabentier(b) = c$
Else
If dp = 0
ReDim tabentier.s(ArraySize(tabentier.s())+1)
dp = 1
EndIf
EndIf
Next
If n = < ArraySize(tabentier.s())
ProcedureReturn tabentier.s(n)
Else
ProcedureReturn ""
EndIf
EndProcedure
Debug Digit3("J'ai 21 doigts sur moi. Le plus court fait 24 millimètres.",2)
Ollivier 24mm c'est ton 21em doigt

Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mar. 13/sept./2016 16:28
par Zorro
MLD a écrit :Ollivier ok
Zorro Si l'entier touche une lettre ton algo ne fonctionne pas
oui c'est clair , meme si les chiffres sont en chinois ,en cyrillique,en maya etc... ça ne marche pas non plus

Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mar. 13/sept./2016 19:13
par Ollivier
MLD a écrit :Ollivier 24mm c'est ton 21em doigt ?
Après une heure de baignade dans une eau à 12 degrés, si t'as mieux, fais un selfie.
Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mar. 13/sept./2016 19:15
par Shadow
Intéressant merci
Zorro, je ne sais pas trop mais je pense que c'est peut être une bonne chose si tu doute de toi non ?
Perso je trouve que tu as fais de gros effort ici pour rester plus zen et je t'en félicite d'ailleurs.
C'est bien de savoir se remettre en question.
Peut être que les évènements qui ton toucher ont aider à cela ?
En tous les cas moi j'te félicite car t'es bien plus agréable à vivre.
Est ce que je suis le seule à penser ça ?
Non parce que quand ça va mal, faut le dire
mais quand ça va bien aussi !
Cordialement.
Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mer. 14/sept./2016 9:23
par MLD
Ollivier
Aprés reflexions, je trouve ceci pratique.
Code : Tout sélectionner
Procedure.s Digit3(text.s,n)
nd = 1:c$ = ""
For z = 1 To Len(text.s + " ")
A = Asc(Mid(text,z,1))
Select A
Case 48 To 57
dp =1
c$ =c$ + Chr(A)
Default
If dp = 1
If n = nd
ProcedureReturn c$
Else
dp =0 : c$ = ""
nd = nd +1
EndIf
EndIf
EndSelect
Next
ProcedureReturn ""
EndProcedure
Debug Digit3("J'ai 21 doigts sur moi. Le plus court fait 24 millimètres.",2)
Maintenant un entier ou un chiffre décimal
Code : Tout sélectionner
Procedure.s Digit4(text.s,n)
nd = 1:c$ = ""
For z = 1 To Len(text.s + " ")
A = Asc(Mid(text,z,1))
Select A
Case 48 To 57
dp =1
c$ =c$ + Chr(A)
Case 44,46
If dp = 1
c$ =c$ + Chr(A)
EndIf
Default
If dp = 1
If n = nd
ProcedureReturn c$
Else
dp =0 : c$ = ""
nd = nd +1
EndIf
EndIf
EndSelect
Next
ProcedureReturn ""
EndProcedure
Debug Digit4("J'ai 21 doigts sur moi. Le plus court fait 24.2 millimètres.",2)
Pas besoin de selfie regarde

Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mer. 14/sept./2016 9:30
par Kwai chang caine
Lord dayvid shadow a écrit :En tous les cas moi j'te félicite car t'es bien plus agréable à vivre.
Est ce que je suis le seule à penser ça ?
Non non, je suis exactement du même avis.
J'aurais pas dit mieux, et tu as raison aussi de dire que y'a pas que le négatif qu'il faut souligner
Doux, poli, posé, respectueux.....un vrai "gnagneau" .....
Pour une fois le conte se finit bien...c'est le loup qui a été mangé

Re: Retourner le Nième entier numérique depuis une chaîne
Publié : mer. 14/sept./2016 10:32
par Zorro
MLD a écrit :
Maintenant un entier ou un chiffre décimal
juste pour info , ma methode fonctionne aussi pour les chiffres decimal
petite variante pour faire ressortir les entiers, les decimal, l'hexa,les chiffres romains, les binaires ! (LOL)
ps: en utilisant le meme principe avec les RegEx on doit pouvoir pousser le principe
Code : Tout sélectionner
Declare.s digit_by_zorro(text.s,reset=#false)
;a.s= "J'ai 21 doigts sur moi. Le plus court fait 24 millimètres."
;a.s="J'ai 21 doigts sur moi. Le plus court fait 24.2 millimètres."
a.s="J'ai 21 doigts sur moi. Le plus court fait $A1 millimètres, voir 2.54 ou bien VII cm ça depends des moments, voir meme %1001 "
debug a.s
Debug ""
digit_by_zorro(a.s,#true)
For t=1 to 5
Debug "nombre ressortis :"+digit_by_zorro(a.s)
Next t
Procedure.s digit_by_zorro(Text.S,reset=#False)
; By Zorro
; le parametre Reset permet de remettre le pointeur de recherche 'pos' a zero
static pos
if pos=0 or Reset=#true
pos=1
ProcedureReturn ""
Else
Pos=pos+1
endif
ref.s="0,1,2,3,4,5,6,7,8,9,$A,$B,$C,$D,$E,$F,I,II,III,IV,V,VI,VII,VIII,IX,X,%0,%1"
For i=pos to CountString(Text.S," ")+1
extrait.s=StringField(Text.s,i," ")
;debug extrait.s
For b=1 to countstring(Ref.s,",")+1
if FindString(extrait.s,StringField(ref.s,b,","))>0
pos=i
ProcedureReturn StringField(Text.s,pos," ")
Endif
Next b
Next i
EndProcedure
;Epb
[reedit]
j'ai ajouté un parametre de reset pour remettre le pointeur de recherche (variable static 'Pos' ) a zero
pour permettre une nouvelle recherche a partir du debut de la phrase