Page 1 sur 1
[R] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 18:49
par corrs78
Bonsoir,
comme d'habitude je bataille avec les expressions régulières que je pratique 1 fois pas an. (voilà pourquoi)
je viens solliciter votre aide :
je souhaite extraire un incrément d'une chaine de caractere
le premiers "groupe|" est une chaine de 1 à 2 chiffres -> incrément issu d'une BDD Sqlite
j’étais parti sur la fonction strinTrimLeft mais vu que l’incrément peut etre composé de 1,2 ou 3 ... caractères(chiffres) ça ne va pas.
soit je me retrouve avec 1 seul chiffre, soit j'ai le "|" dans ma chaine en 2e position.
voici deux exemple de chaine :
9|aaaaaaaaa|bbbbbbb|ccccccc|exemple|
10|xwzeze|dfdfdfd|test|exemple2|
je suppose qu'il faut utiliser la fonction "StringRegExpReplace" ?
merci de votre aide.
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 19:32
par jchd
Number()
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 19:35
par mikell
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 19:35
par jguinch
Code : Tout sélectionner
$s = "92|aaaaaaaaa|bbbbbbb|ccccccc|exemple|"
$Num = StringRegExpReplace($s, "^(\d+).*", "$1")
ConsoleWrite($num)
Sinon, StringSplit
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 19:56
par jchd
Code : Tout sélectionner
$s = "92|aaaaaaaaa|bbbbbbb|ccccccc|exemple|"
ConsoleWrite($s + 0)
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 19:58
par corrs78
Merci je vais essayer ces différentes solutions et reviens vers vous
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 20:07
par jguinch
@jc : c'est de la sorcellerie ton truc !

Re: [..] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 20:22
par jchd
Aucunement : <chaîne> <opérateur mathématique> <valeur numérique> force la conversion de la chaîne en nombre par appel à Number(). Ajouter zéro ne change pas le résultat. ConsoleWrite (ou tout autre emploi du résultat en temps que chaîne) impose la conversion par String().
C'est exactement la même chose que String(Number($s)) à part qu'on utilise les conversions implicites.
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 20:27
par corrs78
merci je vais prendre la solution de jguinch (on gagne quelques lignes de code

)
maintenant il ne me reste plus qu'à comprend l'expression réguliére.
la solution de jc fonctionne, mais je n'arrive pas à m'expliquer comment :O
Merci à tous et bon WE
Re: [R] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 20:28
par jchd
Voir ci-dessus. Tout y est, ainsi que dans l'aide sous DataTypes.
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 20:30
par corrs78
jchd a écrit :Aucunement : <chaîne> <opérateur mathématique> <valeur numérique> force la conversion de la chaîne en nombre par appel à Number(). Ajouter zéro ne change pas le résultat. ConsoleWrite (ou tout autre emploi du résultat en temps que chaîne) impose la conversion par String().
C'est exactement la même chose que String(Number($s)) à part qu'on utilise les conversions implicites.
ok merci j'ai saisi.
Re: [R] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 20:37
par mikell
jc j'ai repéré l'effet Houdini
Parce qu'après tout comme tu l'avais dit avant, Number($s) marche très bien

Re: [R] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 21:04
par jchd
Oui, Number() donne un Integer32, ou *64 selon la magnitude, qui sera automagiquement converti en chaïne à la première occasion, explicite ou implicite. Le besoin de conversion explicite vers un type donné (chaîne ou entier) est rare. Dans la majorité des cas, le contexte d'utilisation du résultat force le type adequat et une éventuelle conversion.
Re: [R] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 22:14
par mikell
Vraiment très intéressant ce concept de conversion implicite, même si pour une simple question de rigueur il vaudrait peut-être mieux qu'il ne sorte pas des coulisses
Re: [R] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 22:26
par orax
C'est d'ailleurs documenté, qu'un appel implicite sur Number() est fait.
Language Reference - Datatypes
Mais la chaîne doit commencer par le nombre.
Code : Tout sélectionner
Number("5") ; 5
Number("xxxx5") ; 0
Number("5xxxx") ; 5
Number("xx5xx") ; 0
StringFormat("%i", $s) pouvait fonctionner aussi.
Re: [R] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 22:32
par mikell
Evidemment, c'est aussi documenté dans Number()
"A string beginning with digits has non-numeric characters stripped"
Mais fallait y penser... parce qu'une fois présenté, "bon sang mais c'est bien sûr"

Re: [R] Extraire les 2 premiers caractères d'une chaine...
Posté : ven. 11 juil. 2014 23:45
par jchd
Mais c'est sorti des coulisses depuis la création d'AutoIt. C'est tout l'intérêt des Variants de disposer de méthodes qui en permettent la conversion d'une apparence à l'autre.
Sinon, comment pourrait-on faire :