[R] Extraire les 2 premiers caractères d'une chaine...
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- corrs78
- Niveau 5

- Messages : 160
- Enregistré le : lun. 13 août 2007 17:38
- Localisation : Yvelines
- Status : Hors ligne
[R] Extraire les 2 premiers caractères d'une chaine...
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.
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.
Modifié en dernier par corrs78 le ven. 11 juil. 2014 20:23, modifié 1 fois.
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Number()
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- mikell
- Spammer !

- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Et pourquoi pas
Code : Tout sélectionner
$res = StringSplit($chaine, "|")[1]" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Code : Tout sélectionner
$s = "92|aaaaaaaaa|bbbbbbb|ccccccc|exemple|"
$Num = StringRegExpReplace($s, "^(\d+).*", "$1")
ConsoleWrite($num)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Code : Tout sélectionner
$s = "92|aaaaaaaaa|bbbbbbb|ccccccc|exemple|"
ConsoleWrite($s + 0)La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- corrs78
- Niveau 5

- Messages : 160
- Enregistré le : lun. 13 août 2007 17:38
- Localisation : Yvelines
- Status : Hors ligne
Re: [..] Extraire les 2 premiers caractères d'une chaine...
Merci je vais essayer ces différentes solutions et reviens vers vous
Re: [..] Extraire les 2 premiers caractères d'une chaine...
@jc : c'est de la sorcellerie ton truc ! 
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Extraire les 2 premiers caractères d'une chaine...
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.
C'est exactement la même chose que String(Number($s)) à part qu'on utilise les conversions implicites.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- corrs78
- Niveau 5

- Messages : 160
- Enregistré le : lun. 13 août 2007 17:38
- Localisation : Yvelines
- Status : Hors ligne
Re: [..] Extraire les 2 premiers caractères d'une chaine...
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
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
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [R] Extraire les 2 premiers caractères d'une chaine...
Voir ci-dessus. Tout y est, ainsi que dans l'aide sous DataTypes.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- corrs78
- Niveau 5

- Messages : 160
- Enregistré le : lun. 13 août 2007 17:38
- Localisation : Yvelines
- Status : Hors ligne
Re: [..] Extraire les 2 premiers caractères d'une chaine...
ok merci j'ai saisi.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.
- mikell
- Spammer !

- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [R] Extraire les 2 premiers caractères d'une chaine...
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
Parce qu'après tout comme tu l'avais dit avant, Number($s) marche très bien
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [R] Extraire les 2 premiers caractères d'une chaine...
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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- mikell
- Spammer !

- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [R] Extraire les 2 premiers caractères d'une chaine...
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
Code : Tout sélectionner
msgbox(0,"", Number(12) & 3 )
msgbox(0,"", String(2) + "2")" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- orax
- Modérateur

- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: [R] Extraire les 2 premiers caractères d'une chaine...
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.
StringFormat("%i", $s) pouvait fonctionner aussi.
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") ; 0De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
- mikell
- Spammer !

- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [R] Extraire les 2 premiers caractères d'une chaine...
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"
"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"
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [R] Extraire les 2 premiers caractères d'une chaine...
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 :
Sinon, comment pourrait-on faire :
Code : Tout sélectionner
ConsoleWrite(123 & @LF)La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
