[R] Extraire les 2 premiers caractères d'une chaine...

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
corrs78
Niveau 5
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...

#1

Message 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.
Modifié en dernier par corrs78 le ven. 11 juil. 2014 20:23, modifié 1 fois.
Avatar du membre
jchd
AutoIt MVPs (MVP)
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...

#2

Message par jchd »

Number()
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
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...

#3

Message par mikell »

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 )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Extraire les 2 premiers caractères d'une chaine...

#4

Message par jguinch »

Code : Tout sélectionner

$s = "92|aaaaaaaaa|bbbbbbb|ccccccc|exemple|"
$Num = StringRegExpReplace($s, "^(\d+).*", "$1")
ConsoleWrite($num)
 
Sinon, StringSplit
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jchd
AutoIt MVPs (MVP)
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...

#5

Message par jchd »

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é.
Avatar du membre
corrs78
Niveau 5
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...

#6

Message par corrs78 »

Merci je vais essayer ces différentes solutions et reviens vers vous
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Extraire les 2 premiers caractères d'une chaine...

#7

Message par jguinch »

@jc : c'est de la sorcellerie ton truc ! :)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jchd
AutoIt MVPs (MVP)
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...

#8

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
corrs78
Niveau 5
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...

#9

Message 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. :roll:

la solution de jc fonctionne, mais je n'arrive pas à m'expliquer comment :O

Merci à tous et bon WE
Avatar du membre
jchd
AutoIt MVPs (MVP)
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...

#10

Message par jchd »

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é.
Avatar du membre
corrs78
Niveau 5
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...

#11

Message 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.
Avatar du membre
mikell
Spammer !
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...

#12

Message 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 :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
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...

#13

Message 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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
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...

#14

Message 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

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 )
Avatar du membre
orax
Modérateur
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...

#15

Message 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.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
mikell
Spammer !
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...

#16

Message 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" :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
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...

#17

Message 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 :

Code : Tout sélectionner

ConsoleWrite(123 & @LF)
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre