comparer une variable à une liste

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

comparer une variable à une liste

#1

Message par yohanb767 »

Bonjour ,

dans un de mes script suivant le résultat de ma variable $sdevis , si celui-ci correspond à un de mes numéros compris dans une de mes cases alors un action s'effectue
ce que j'aimerai savoir c'est si il est possible de stocker tous mes numéros dans un fichier .ini ou autre afin de pouvoir y rajouter des numéros sans être obligé d'aller dans mon script car on peux être amener à en rajouter

et la je ne vois pas trop
si quelqu'un a une solution ou me donner ou une piste merci d'avance à tous

sachant que j'ai fait mon premier fichier ini il y a quelque jour donc je ne suis pas encore trop à l'aise

Code : Tout sélectionner

Switch $sdevis

Case "293555594","189432200","188626142","188451235","293555586","188602981","189379677","260438026","293577280","188379264","251366131"

;action  a effectuer

Case "293644502","293537306","293557824","252664565"

;action a effectuer

Modifié en dernier par orax le dim. 11 févr. 2018 15:47, modifié 1 fois.
Raison : Remplace BBCode [code2] par [code].
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: comparer une variable à une liste

#2

Message par mdanielm »

Le fichier:
[devis]
1=293555594,189432200,188626142,188451235,293555586,188602981,189379677,260438026,293577280,188379264,251366131
2=293644502,293537306,293557824,252664565

Le script:
Global $sdevis = "293557824"

; Ligne 1
Global $iAction = 1
Global $line = IniRead("devis.txt", "devis", "1", "")

while $line <> ""
   If StringInStr($line, $sdevis) > 0 Then
      msgbox(0,"", "Action " & $iAction)
      $line = "" ; pour arrêter
   Else
      $iAction += 1
      $line = IniRead("devis.txt", "devis", string($iAction), "")
   EndIf
WEnd
 
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: comparer une variable à une liste

#3

Message par yohanb767 »

Super ! Mdanielm

Merci ! Je vais de suite l intégrer a mon script

Merci encore
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: comparer une variable à une liste

#4

Message par yohanb767 »

cela ne va pas en faite ! car c'est très bien quand n'ai que deux actions à effectuer mais la pour chaque numéros trouvé il y a une action différente

Code : Tout sélectionner

Switch $sdevis

Case "293555594","189432200","188626142","188451235","293555586","188602981","189379677","260438026","293577280","188379264","251366131"
;Action à effectuer si $sdevis et trouvé dans cette case

Case "293644502","293537306","293557824","252664565"
;une autre action  à effectuer si $sdevis et trouvé dans cette case

Case "293669484","0101","0103","000","0102"
;une autre action  à effectuer si $sdevis et trouvé dans cette case

Case "293525281","293551281","293662328","186281507","293559641","191609976","186281630"
;une autre action  à effectuer si $sdevis et trouvé dans cette case

EndSwitch

ect..

alors comme j'ai expliqué ce que j'aimerai c'est d'avoir un fichier .ini ou txt ou je mettrai tout ces numéros un peu comme ceci

[devis]
1="293555594","189432200","188626142","188451235","293555586","188602981","189379677","260438026","293577280","188379264","251366131" 2="293644502","293537306","293557824","252664565"
3= "293669484","0101","0103","000","0102"
4="293525281","293551281","293662328","186281507","293559641","191609976","186281630"
5="188603024","189432263","293563955","293548812","188400233","189388168","189719219"
6= "293594893","293600261","293621489","293601276","293601284"
7= "260562872","293575640","260562913","293582702","293567924"
8="189416967","189602039","192004943","189416967"

et que dans mon script

si $sdevis et trouver dans la premiere ligne alors effectuer une action
si $sdevis et trouver dans la seconde ligne alors effectuer une autre action
etc..

j'arrive très bien à le faire avec switch case mais en allant chercher les infos fans un fichier ini ou txt la je ne trouve pas

merci d'avance de votre aide
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: comparer une variable à une liste

#5

Message par jchd »

Il y a plein de possibilités, mais ce que je pifométrise c'est que s'il y a des devis, il y a aussi des clients, des fournisseurs, des fournitures, des factures, des règlements, un suivi de projets ou chantiers, etc.

Je doute que tout celà puisse se gérer facilement avec des fichiers .INI ou autre format "plat". Si c'est bien ce dont je me doute, c'est une base de données qu'il faut mettre en place.

C'est après l'analyse des entités en jeu et de leurs relations qu'on peut formuler un embryon de solution viable, fiable, pérenne et extensible.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: comparer une variable à une liste

#6

Message par yohanb767 »

Bonjour jchd ,

non il n'y aura rien de tout ça
il n'y aura que les code articles du fichier .ini et le fameux $sdevis et rien d'autre
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: comparer une variable à une liste

#7

Message par walkson »

Peut être comme ceci ?
#include <Array.au3>
$sFilePath = "AAA.ini"
Local $aArray = IniReadSection($sFilePath, "devis")
_ArrayDisplay($aArray)
   If Not @error Then
      For $i = 1 To $aArray[0][0]
         $value = $aArray[$i][1]
         $split = StringSplit($value,",")
         _ArrayDisplay($split)
         For $y = 1 To $split[0]
            $sdevis =$split[$y]
         Switch $sdevis

            Case "293555594","189432200","188626142","188451235","293555586","188602981","189379677","260438026","293577280","188379264","251366131"
            ;Action à effectuer si $sdevis et trouvé dans cette case
            ConsoleWrite($sdevis & "  " &$aArray[$i][0] & @CR )

            Case "293644502","293537306","293557824","252664565"
            ;une autre action  à effectuer si $sdevis et trouvé dans cette case
            ConsoleWrite($sdevis & "  " &$aArray[$i][0] & @CR )

            Case "293669484","0101","0103","000","0102"
            ;une autre action  à effectuer si $sdevis et trouvé dans cette case
            ConsoleWrite($sdevis & "  " &$aArray[$i][0] & @CR )

            Case "293525281","293551281","293662328","186281507","293559641","191609976","186281630"
            ;une autre action  à effectuer si $sdevis et trouvé dans cette case
            ConsoleWrite($sdevis & "  " &$aArray[$i][0] & @CR )

         EndSwitch
         Next


      Next
   EndIf
avec le ini comme ceci
[devis]
1=293555594,189432200,188626142,188451235,293555586,188602981,189379677,260438026,293577280,188379264,251366131
2=293644502,293537306,293557824,252664565
3=293669484,0101,0103,000,0102
4=293525281,293551281,293662328,186281507,293559641,191609976,186281630
5=188603024,189432263,293563955,293548812,188400233,189388168,189719219
6=293594893,293600261,293621489,293601276,293601284
7=260562872,293575640,260562913,293582702,293567924
8=189416967,189602039,192004943,189416967
Les _ArrayDisplay() ne sont pas indispensables, simplement pour voir
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: comparer une variable à une liste

#8

Message par mdanielm »

Pourquoi, seulement 2 actions?


Global $sdevis = "293557824"

; Ligne 1
Global $iAction = 1
Global $line = IniRead("devis.txt", "devis", "1", "")

while $line <> ""
   If StringInStr($line, $sdevis) > 0 Then
      Action($iAction)
      $line = "" ; pour arrêter
   Else
      $iAction += 1
      $line = IniRead("devis.txt", "devis", string($iAction), "")
   EndIf
WEnd

func Action($i)
   switch $i
      case 1
         ;tout pour l'action 1
      case 2
         ;tout pour l'action 2
      case 3
         ;tout pour l'action 3
   endswitch
EndFunc
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: comparer une variable à une liste

#9

Message par yohanb767 »

je crois que je me suis mal expliquer walkson je suis désolé ce que j'ai dans mon script c'est ça

Switch $sdevis

Case "293555594","189432200","188626142","188451235","293555586","188602981","189379677","260438026","293577280","188379264","251366131"
;Action à effectuer si $sdevis et trouvé dans cette case
EndSwitch


j'aimerai juste que l'utilisateur puisse ajouter un numéros sans devoir aller l'ajouter dans le script directement
donc pour ça je pensais utiliser un fichier ini ou txt

cela donnerai

$devis serai = à un input ou l'on saisirai un numéros
ensuite il serai comparé à l'ensemble de mon fichier afin de détérminer à quel ligne du fichier ini le numéros appartient 1 à 8 dans mon cas
si le numéros appartiens à la ligne 1 alors effectuer cette action
si le numéros appartiens à la ligne 2 alors effectuer cette action
si le numéros appartiens à la ligne 3 alors effectuer cette action
ect..

encore désolé Walkson mais quand on débute cela n'est pas souvent facile de s'expliquer
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: comparer une variable à une liste

#10

Message par walkson »

c'est surtout moi qui ait lu en diagonale :mrgreen:
Donc si je vous comprends bien, le code de Daniel est ce qu'il vous faut !
Quand vous dites qu'il ne fait que 2 actions, vous vous trompez car
$iAction += 1
$line = IniRead("devis.txt", "devis", string($iAction), "")

$iAction s'incrémente de plus 1 s'il ne trouve pas le nombre et donc passe sur la key suivante
[Edit]Par contre, en testant son code, je me suis aperçu que si en ligne 1, on a 92580101 et que l'on recherche 0101 en ligne 3, son code retourne la ligne 1
Je me suis permis de compléter son code comme suit:
Global $sdevis = "0101"

; Ligne 1
Global $iAction = 1
Global $line = IniRead($sFilePath, "devis", "1", "")

while $line <> ""
        Local $rep = 0
      $split = StringSplit($line,",")
      For $i = 1 To $split[0]
         If $split[$i] = $sdevis Then
            $rep = 1
            ExitLoop
         EndIf

      Next

      If $rep = 1 Then
                Action($iAction)
                $line = "" ; pour arrêter
        Else
                $iAction += 1
                $line = IniRead($sFilePath, "devis", string($iAction), "")
            ConsoleWrite($line & @CR)
        EndIf
WEnd

func Action($i)
        switch $i
                case 1
                        ;tout pour l'action 1
                  MsgBox(0,"",1)
                case 2
                        ;tout pour l'action 2
                  MsgBox(0,"",2)
                case 3
                        ;tout pour l'action 3
                  MsgBox(0,"",3)
        endswitch
EndFunc
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: comparer une variable à une liste

#11

Message par yohanb767 »

Merci Walkson !!

c'est tout à fait ce que je chercher à faire !
je vais décortiqué tout ça pour en apprendre le plus possible

je te demanderai bien de me mettre des commentaires dans le script mais je ne veux pas t'embêter d'avantage
alors encore merci et bonne journée
Répondre