Page 1 sur 1

condition sur une chaîne de chiffre

Posté : jeu. 09 nov. 2017 11:34
par yohanb767
Bonjour à tous ,

j'ai essayer chercher un peu sur le net mais je ne sais pas trop dans quel direction chercher alors je me tourne vers ce forum au cas ou quelqu'un aurai un exemple de ce que je voudrai

j'aimerai en faite inclure dans un de mes script une condition sur une chaîne de chiffre et de lettre

exemple : CK1985475 si cette chaîne possède un C alors .. si cette chaîne posséde un D alors..
sachant que ce sera toujours dans les deux premiere lettre

j’espère avoir bien expliqué mon prob

en tout cas merci d'avance pour votre aide

Yohan

Re: condition sur une chaîne de chiffre

Posté : jeu. 09 nov. 2017 11:43
par walkson
Bonjours,
StringInStr() devrait convenir

Re: condition sur une chaîne de chiffre

Posté : jeu. 09 nov. 2017 13:39
par TomAijerrie
Et pour avoir que les 2 premiers caractères, StringLeft($texte,2)
Ce qui donne :

Code : Tout sélectionner

$texte = "CK1985475"

If StringInStr(StringLeft($texte,2),"C") Then
    ;Il y a un C
EndIf
If StringInStr(StringLeft($texte,2),"D") Then
    ;Il y a un D
EndIf
;...

Re: condition sur une chaîne de chiffre

Posté : jeu. 09 nov. 2017 14:50
par walkson
@TomAijerrie
StringLeft($texte,2) n'est pas nécessaire puisque StringInStr() retourne la position du caractère trouvé

un exemple:
$variable = "CK1985475"
$val = InputBox("","recherche")
$recherche = StringInStr($variable,$val)

Switch $recherche
   Case 1
      MsgBox(0,"cas 1","dans variable, recherche est en position  " & $recherche)
   Case 2
      MsgBox(0,"cas 2","dans variable, recherche est en position  " & $recherche)
   case 3 To 10
      MsgBox(0,"autre","dans variable, recherche est en position  " & $recherche)
   Case 0
      MsgBox(0,"pas trouvé","dans variable, recherche est en position  " & $recherche)
EndSwitch
Sauf, peut être, dans le cas de doublon comme $variable = "CC1985475" (problème que ne soulève pas yohanb767)
Dans ce cas, je verrais quelque chose comme
Local $sText = "CC1985475"
Local $sMot_cle = "C"
Local $positiontt
For $i = 1 To 2
    $position = StringInStr($sText,$sMot_cle,1,$i)
If $position < 3 Then $positiontt &= $position & @CRLF
Next
MsgBox(0,"",$positiontt)

Re: condition sur une chaîne de chiffre

Posté : jeu. 09 nov. 2017 15:10
par walkson
@yohanb767
C'est très gentil à vous de me remercier mais ce serait mieux de le faire sur le bon post :lol:
https://www.autoitscript.fr/forum/viewt ... 38#p101538 (de 2014 :mrgreen: )

Re: condition sur une chaîne de chiffre

Posté : ven. 10 nov. 2017 12:58
par yohanb767
Rebonjour Walkson , et je note pour le com ! je n'avais pas fais gaffe

par contre juste un points sur ma recherche que je n'avais pas stipulé
c'est qu'en faite dans ma recherche cela peux être CK....... mais aussi C....... mais aussi d'autre lettre comme W.... ou RX..... et que pour chaque cas cela lance une action différente

si CK...... alors
si C ..... alors
si W..... alors
si RX..... alors

du coup avec l'exemple je suis un peux bloqué

Re: condition sur une chaîne de chiffre

Posté : ven. 10 nov. 2017 14:48
par walkson
Bonjour,
Je ne sais pas si je vous ai bien compris mais je vous propose ceci
Local $sText = "CK1985475"
Local $sMot_cle = "CK"
$position = StringInStr($sText,$sMot_cle,1,1)
MsgBox(0,"",$position)
If $position = 1 Then
   Select
      Case $sMot_cle = "CK"
         ;action
      Case $sMot_cle = "CD"
         ;action
      Case $sMot_cle = "C"
         ;action
      Case $sMot_cle = "WE"
         ;action
   EndSelect
EndIf

Re: condition sur une chaîne de chiffre

Posté : ven. 10 nov. 2017 15:26
par yohanb767
désolé Walkson , je n'arrive pas a expliquer je pense

je vais essayer d'exposer le tout

j'ai une input qui contient ce fameux code avec ces deux lettres ou une seul et une succession de chiffres (jamais les mêmes)

exemple CK542544 ou C4546784 ou CK02144564 ou W5451321

si l'ensemble contient CK j'aimerai lancer un de mes script que je possède déjà
si l'ensemble contient juste un C j'aimerai lancer un autre script
si l'ensemble contient un juste un W encore un autre script
Etc

j'espère que cela sera plus claire pour éviter de trop t'ennuyer

en tout cas merci de ton aide car cela me met sur des pistes même si je sèche encore

Re: condition sur une chaîne de chiffre

Posté : ven. 10 nov. 2017 16:16
par walkson
Si j'ai bien compris, vous cherchez les lettres dans une chaîne et en fonction du résultat, vous effectuez une action
comme ceci ?
#include <StringConstants.au3>
#include <Array.au3>

Global $sujet, $regex, $aArray

$sujet = "C14567890"
$regex = "(?s)[A-Z]+"
$aArray = StringRegExp($sujet, $regex, $STR_REGEXPARRAYMATCH)
If @error Then Exit MsgBox(16,"Pas de lettre","ERROR")
_ArrayDisplay($aArray)
Switch $aArray[0]
   Case  "CK"
      MsgBox(0,$aArray[0],"y a CK")
         ;action
   Case  "CD"
         ;action
   Case  "C"
      MsgBox(0,$aArray[0],"y a C")
         ;action
   Case  "WE"
         ;action
   Case Else
      MsgBox(0,"","y a pas")
EndSwitch
Je ne suis pas très brillant en regex mais ça fonctionne. D'autres auront sûrement de meilleurs solutions
J'ai rajouté une gestion d'erreur dans le cas où le regex ne trouve rien (pas de lettre) sinon $aArray[0] bugue

Re: condition sur une chaîne de chiffre

Posté : ven. 10 nov. 2017 23:17
par yohanb767
c'est impeccable Walkson !
merci

j'ai quelques adaptations à y faire mais c'est exactement ce que je voulais

bon week-end
et encore merci pour toutes tes connaissances

Re: condition sur une chaîne de chiffre

Posté : mer. 29 nov. 2017 08:24
par yohanb767
Bonjour walkson ,

je reviens sur un script que tu m'avais proposé pour résoudre un de mes problèmes
le but été de lancer des actions différentes selon les lettres qui composent une série de lettres et de chiffres
pour cela tu m'a écris une commande pour isoler que les lettres dans la série de chiffres et lettres
et ensuite utiliser le fameux switch case

le soucis c'est qu'à présent j'ai un autre cas qui peux arriver c'est a dire avoir juste une série de chiffre dans $sujet
le problème c'est que le fait de faire un switch case que sur les lettres cela ne rend pas possible la chose
j'aimerai que si il y a juste une série de chiffre que cela lance une autre action

pense tu qu'il y a moyen d'inclure cela dans ce script

bonne soirée ou bonne journée à toi

voici ce que tu m'avais proposé

Code : Tout sélectionner

#include <StringConstants.au3>
#include <Array.au3>

Global $sujet, $regex, $aArray

$sujet = "C14567890"
$regex = "(?s)[A-Z]+"
$aArray = StringRegExp($sujet, $regex, $STR_REGEXPARRAYMATCH)
If @error Then Exit MsgBox(16,"Pas de lettre","ERROR")
_ArrayDisplay($aArray)
Switch $aArray[0]
Case "CK"
MsgBox(0,$aArray[0],"y a CK")
;action
Case "CD"
;action
Case "C"
MsgBox(0,$aArray[0],"y a C")
;action
Case "WE"
;action
Case Else
MsgBox(0,"","y a pas")
EndSwitch