Page 1 sur 1
[R] Nombre de caractère dans un String
Posté : ven. 22 juil. 2011 20:03
par yanius
Bonjour à tous !
J'étais en train de créer une calculatrice un peu plus avancée, lorsque je suis tombé sur un petit problème !
En effet, lorsque l'utilisateur clique sur "=" le programme vérifie la syntaxe du calcul.
Dans le cas où l'utilisateur entre par erreur "3.14.159", j'ai créer une fonction qui revoie le nombre de fois qu'apparaît un caractère.
Mais elle ne semble pas fonctionner correctement. Où ai-je fait une erreur ?
Code : Tout sélectionner
[spoiler=]Func NmbrElementString($string11, $element)
$num = 0
$len1 = StringLen($element)
$one = StringInStr($string11, $element)
If $one = 0 Then
Return 0
Else
$len2 = $len1 + $one
While $one = 0
$stri1 = StringMid($string11, 1, $one)
$stri2 = StringMid($string11, $len2)
$stri3 = $stri1 & $stri2
$one = StringInStr($stri3, $element, 0, 0)
$num = $num + 1
WEnd
Return $num
EndIf
EndFunc[/spoiler]
Re: [..] Nombre de caractère dans un String
Posté : ven. 22 juil. 2011 21:09
par PandiPanda
Bonsoir,
Si vous ne vouliez seulement renvoyer le nombre de fois qu'apparaît un caractère
vous pouvez utilisez ceci;
► Afficher le texte
Code : Tout sélectionner
Func NmbrElementString($string11, $elementl)
If IsString($string11) And IsString($elementl) Then
Local $nArray=StringRegExp( $string11, "("&$elementl&")",3)
If IsArray($nArray)Then
Return UBound($nArray)
Else
Return 0
EndIf
Else
SetError(1)
Return -1
EndIf
EndFunc
Re: [..] Nombre de caractère dans un String
Posté : ven. 22 juil. 2011 22:51
par mikell
yanius a écrit :Dans le cas où l'utilisateur entre par erreur "3.14.159"
Pourquoi ne pas intercepter ça à l'écriture ? dans ma calculette j'ai mis pour l'entrée du point :
Code : Tout sélectionner
$valeur = GuiCtrlRead($input)
[color=#FF0000]If NOT StringInStr($valeur , ".")[/color] Then GuiCtrlSetData($input, $valeur & ".")
If $valeur = "" Then GuiCtrlSetData($input, "0.")
qui empêche l'utilisateur d'écrire 2 points dans la même valeur
mucho plus simple

Re: [..] Nombre de caractère dans un String
Posté : ven. 22 juil. 2011 22:57
par TT22
Juste, c'est bien de penser au point mais faut pas oublier de faire la même chose pour la virgule

Re: [..] Nombre de caractère dans un String
Posté : ven. 22 juil. 2011 23:04
par timmalos
Si cette fonction doit etre appelée souvent, préférez la réponse de PandiPanda avec les StringRegExp. Cela sera plus rapide comme traitement, empêchant le scintillement de la fenêtre.
Re: [..] Nombre de caractère dans un String
Posté : ven. 22 juil. 2011 23:43
par yanius
Oui, en effet cette fonction doit être appelée à chaque évènement du bouton "=".
Euh juste une question : Comment faire pour convertir un élément string (en l'occurrence $string = GuiCtrlRead($input)) en un élément "nombre" ? Par exemple convertir $string = "1+2" en $string = 1+2.
Re: [..] Nombre de caractère dans un String
Posté : sam. 23 juil. 2011 00:03
par PandiPanda
Bonsoir,
ceci devrai aider;
Number()
petit exemple;
Code : Tout sélectionner
$array=StringSplit("1+2","+")
MsgBox(0,"",Number($array[1])+Number($array[2]))
Re: [..] Nombre de caractère dans un String
Posté : sam. 23 juil. 2011 00:09
par mikell
Autre solution
Code : Tout sélectionner
$string = "1+2"
$string = Execute($string)
msgbox(0,"", $string)
Re: [..] Nombre de caractère dans un String
Posté : sam. 23 juil. 2011 00:17
par yanius
Merci à vous pour vos réponses !
Je préfère quand même utiliser la fonction "Execute" car je ne comprends pas très bien comment marche la fonction "StringSplit"

!
Re: [..] Nombre de caractère dans un String
Posté : sam. 23 juil. 2011 00:23
par PandiPanda
A vrai dire je connaissais même pas Execute()
Note;
StringSplit() va permettre de couper un string grâce à des délimiteurs.
Ainsi prenons un exemple ceci;
$string="je me ferai delimiter par | parceque je le vaut bien :O"
si je fais un $Array=StringSplit($string,"|"); j'aurai un Array contenant 3 choses [par default]
Array[0] => la longueur de l'array [le nombre d'élement]
Array[1] => "je me ferai delimiter par "
Array[2] => " parceque je le vaut bien :O"
Re: [..] Nombre de caractère dans un String
Posté : sam. 23 juil. 2011 00:30
par yanius
A vrai dire moi non plus

(merci mikell !)
Merci pour l'explication !
Re: [..] Nombre de caractère dans un String
Posté : sam. 23 juil. 2011 00:33
par PandiPanda
Si le poste est résolu,
mettre la balise [R] vous permettrai de pas vous faire "gronder" par les différents modérateurs
qui aime le pouvoir ...
Pour ceci, il vous suffit d'editer le titre de votre 1er message !!
Re: [..] Nombre de caractère dans un String
Posté : sam. 23 juil. 2011 00:38
par mikell
Execute est plus adapté, mais pour StringSplit, tu as tort !
Code : Tout sélectionner
_NmbrElementString("3.1.4.15.9", ".")
Func _NmbrElementString($text, $caract)
$nbrs = StringSplit($text, $caract)
msgbox(0,"", "dans " & $text & ", nombre de points : " & $nbrs[0]-1)
EndFunc

Re: [..] Nombre de caractère dans un String
Posté : sam. 23 juil. 2011 00:44
par PandiPanda
Edit; la je suis d'accord ^^
Re: [..] Nombre de caractère dans un String
Posté : sam. 23 juil. 2011 00:52
par mikell
désolé pour le doublon, j'avais mal lu ton code

Code : Tout sélectionner
$text = "3.1.4.15.9"
$nb = _NmbrElementString($text, ".")
msgbox(0,"", "dans " & $text & ", nombre de points : " & $nb)
[color=#4040FF]Func _NmbrElementString($text, $caract)
Return UBound(StringSplit($text, $caract, 2))-1 ; <= PandiPanda found this ^^
EndFunc[/color]
Re: [R] Nombre de caractère dans un String
Posté : sam. 23 juil. 2011 01:07
par yanius
Voilà sujet résolu !! Merci encore.
