Retourner le Nième entier numérique depuis une chaîne

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Retourner le Nième entier numérique depuis une chaîne

Message 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
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Retourner le Nième entier numérique depuis une chaîne

Message par falsam »

Un debug de l'appel à la fonction ne me donne rien. Aurais tu un exemple ? Merci.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
MLD
Messages : 1105
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Retourner le Nième entier numérique depuis une chaîne

Message par MLD »

Salut Ollivier :lol:

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)

Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Retourner le Nième entier numérique depuis une chaîne

Message 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".
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Retourner le Nième entier numérique depuis une chaîne

Message par Zorro »

moi j'aurai fait comme ça :lol: :)

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

Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Retourner le Nième entier numérique depuis une chaîne

Message par Kwai chang caine »

Code : Tout sélectionner

digit_by_zorro
; By Zorro
digit_by_zorro
digit_by_zorro
Celui qui ne sait pas que le code est de toi, il est pas tres observateur :mrgreen: :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Retourner le Nième entier numérique depuis une chaîne

Message par Zorro »

Kwai chang caine a écrit :Celui qui ne sait pas que le code est de toi, il est pas tres observateur :mrgreen: :lol:
c'est clair ! :lol:
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 :lol:

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
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Retourner le Nième entier numérique depuis une chaîne

Message par Micoute »

Comme je te comprend !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
MLD
Messages : 1105
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Retourner le Nième entier numérique depuis une chaîne

Message par MLD »

Ollivier ok
Zorro Si l'entier touche une lettre ton algo ne fonctionne pas :mrgreen:

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 :?:
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Retourner le Nième entier numérique depuis une chaîne

Message par Zorro »

MLD a écrit :Ollivier ok
Zorro Si l'entier touche une lettre ton algo ne fonctionne pas :mrgreen:
oui c'est clair , meme si les chiffres sont en chinois ,en cyrillique,en maya etc... ça ne marche pas non plus :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Retourner le Nième entier numérique depuis une chaîne

Message 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.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: Retourner le Nième entier numérique depuis une chaîne

Message 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.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
MLD
Messages : 1105
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Retourner le Nième entier numérique depuis une chaîne

Message 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 :oops: :mrgreen:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Retourner le Nième entier numérique depuis une chaîne

Message 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 :D
Doux, poli, posé, respectueux.....un vrai "gnagneau" .....
Pour une fois le conte se finit bien...c'est le loup qui a été mangé :wink: :lol:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Retourner le Nième entier numérique depuis une chaîne

Message 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
Dernière modification par Zorro le mer. 14/sept./2016 10:52, modifié 1 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre