Page 1 sur 1

[...]Tableau , Boucle je voudrais que ma boucle me donner le nombre du logiciel faux

Posté : jeu. 07 mars 2019 11:03
par dozosama
Bonjours a tous , voila je fait un programme d'automatisation d'install de logiciel du coup j'ai crée un tableau avec un boucle .

Désoler pour le nom je savais pas trop quoi mètre .

Je vous donne mon code et après mon problème .

Code :

Code : Tout sélectionner

Dim $Array [13] = ["logiciel 0", _ ; 0 
"logiciel 1", _ ; 1 
"logiciel 2", _ ; 2 
"logiciel 3", _ ; 3 
"logiciel 4", _ ; 4 
"logiciel 5", _ ; 5 
"logiciel 6", _ ; 6 
"logiciel 7", _ ; 7 
"logiciel 8", _ ; 8 
"logiciel 9", _ ; 9  
"logiciel 10",_ ; 10 
"logiciel 11" , _ ; 11 
"logiciel 12" ] ; 12 

$dimension = $Array[0]

For $i = 0 To UBound ; de 0 a la fin soit 13 ici
	Sleep (10)
	if FileExists ($Array[$i]) Then  ; test tout les chemins du tableau (var $i)
		TrayTip ("all","ok",10000) ; dit si tout est bon 
	Else
		TrayTip ("/!\ probleme","l'un des nom de logiciel  est pas bon",10000) ; dit si il a 1 faute 
	EndIf

Next
Voila mon code et voila mon problème:

Dans le code ci-dessus il na pas de problème en soit même au contraire tout marche sauf qui si il a un mise a jours de logiciel, (ex : 10_gimp-2.10.8-setup-2.exe passe a 10_gimp-2.15.7-setup-2.exe) et je change pas le code ducoup le phrase, "("/!\ probleme","l'un des nom de logiciel est pas bon",10000)" vas apparaître mais moi ce qui m'arrangerais c'est qui me dise qu'elle est le(s) programme(s) qui a changer de nom, pour pas que j'ai pas a le(s) chercher, ou même un moyen d'afficher les logs a la place de ceci.

Et encore mieux SI C'EST POSSIBLE (maj pour la visibilité) que le code (chemin,nom de logiciel) se change tout seule, et fait en sort que le programme se relance tout seul , si c'est pas possible ou vous savez pas laisser tomber sa c'est pas obliger.(je pense que c'e'st pas possible.)

Si il a un point ou vous avez pas compris hésiter pas a me poser des question j'i répondrais au plus vite.

Le temps je continue mes recherche et je vous tien au courent !

Merci d'avoirs lu et d'une aide future .

Re: [...]Tableau , Boucle je voudrais que ma boucle me donner le nombre du logiciel faux

Posté : ven. 08 mars 2019 12:01
par dozosama
Petit UP :
Personne peut m'aider sur ce programme car la je suis vraiment bloquer et j'ai besoin de cette solution pour pouvoirs continuer mon code ou avoirs un moyen d'afficher les logs enfaite ce que je veut plus precisement c'est un truc qui me permet de savoirs quelle logiciel a un problème

Merci de vos reponse

Re: [...]Tableau , Boucle je voudrais que ma boucle me donner le nombre du logiciel faux

Posté : ven. 08 mars 2019 13:42
par mikell
Tu n'as probablement pas eu de réponse parce que la solution est déjà écrite dans ton code ...

For $i = 0 To UBound($Array)-1
  if FileExists ($Array[$i]) Then
   ;....
  Else
   TrayTip ("probleme","le logiciel " & $Array[$i] & " n'existe pas", 10000) ; <<<<<<<<<<<<<<<
  EndIf
Next

Re: [...]Tableau , Boucle je voudrais que ma boucle me donner le nombre du logiciel faux

Posté : ven. 08 mars 2019 14:26
par walkson
Bonjour,
Entre autres :mrgreen: mais il y a aussi la présentation du sujet quand on passe plus de temps à traduire qu'à résoudre le problème
Petit mise a jours j'ai changer mon code je vais vous maitre le vraix merci de bien vouloirs maider
et je ne suis pas un terroriste de l'orthographe :P mais un minimum serait agréable :bisou:
Entre "va te faire maître" et "la voix de son mettre", chacun verra la différence ! :mrgreen:
Pour faire avancer le Schmilblick
#include <File.au3>
DirCreate(@ScriptDir & "\LOG")
$filelog = @ScriptDir & "\LOG\Example.log"
_FileWriteLog($filelog,@TAB & "~@|@~" & @CRLF &  " ___________________" & @CRLF & "|                   |" & @CRLF & "|     DEBUT log     |" & @CRLF & "|___________________|")
If Not FileExists(@ScriptDir & "\monIni.ini") Then
   Local $prog[4] = [@ScriptDir & "\10_gimp-2.10.8-setup-2.exe ", @ScriptDir & "\Firefox-setup.exe ",@ScriptDir & "\TrucMuch-setup.exe ", "" ]
      For $i = 0 To 12
         $y = $i
         If $y > 3 Then $y = 3
         IniWrite(@ScriptDir & "\monIni.ini","commande","logiciel " & $i, $prog[$y])
         _FileWriteLog($filelog, "logiciel " & $i &" pour "& $prog[$y])
      Next
   ;ShellExecute( $filelog) ;première méthode
   ;ShellExecute("notepad.exe", $filelog) ;deuxième méthode
   ShellExecuteWait(@ScriptDir & "\monIni.ini")
EndIf
$aArray = IniReadSection(@ScriptDir & "\monIni.ini","commande")
_ArrayDisplay($aArray)
For $i = 1 To $aArray[0][0]
   If $aArray[$i][1] = '' Then ExitLoop
   If Not FileExists($aArray[$i][1]) Then _FileWriteLog($filelog,$aArray[$i][0] &" pour "& $aArray[$i][1] & " n'existe pas !")
Next

_FileWriteLog($filelog,@CRLF &  " ___________________" & @CRLF & "|                   |" & @CRLF & "|      Fin log      |" & @CRLF & "|___________________|" & @CRLF & @TAB & "~" & Chr(169) &"|"& Chr(169) & "~"  )
ShellExecute( $filelog)
 
J'ai mis dans un Ini le nom du logiciel et son chemin. Cela permet de mettre à jour sans avoir la contrainte des variables fixes du code
J'ai rajouté une méthode simple pour les logs et de les ouvrir en réponse à votre autre demande
On peut imaginer au niveau de la boucle
For $i = 1 To $aArray[0][0]
   If Not FileExists($aArray[$i][1]) Then
      controlProg()
   Else
      MsgBox(64,"Control",$aArray[$i][0] &" = "& $aArray[$i][1] & " est à jour", 4)
   EndIf

Next
Func controlProg()
      MsgBox(16, "Control", $aArray[$i][1] & " n'existe pas !", 4)
      $fileopen = FileOpenDialog("Recherche programme: " & $aArray[$i][1], @DesktopDir,"exe(*.exe)",$FD_FILEMUSTEXIST)
      If @error Then Return SetError(1) ;quand clic annuler
      IniWrite(@ScriptDir & "\monIni.ini","commande",$aArray[$i][0], $fileopen)
      _FileWriteLog($filelog, $aArray[$i][0] & " mis à jour " & $fileopen)
EndFunc
Je pense que c'était ce que vous souhaitiez

Re: [...]Tableau , Boucle je voudrais que ma boucle me donner le nombre du logiciel faux

Posté : sam. 09 mars 2019 12:22
par dozosama
Merci de vos réponse je vais tester sa désoler pas pour répondre hier et pour l’orthographe désoler mais j'ai beaucoup de problème avec sa quoique je fasse

Je vous tien au courent !

encore merci pour l'aide

Re: [...]Tableau , Boucle je voudrais que ma boucle me donner le nombre du logiciel faux

Posté : sam. 09 mars 2019 15:01
par mikell
walkson a écrit : ven. 08 mars 2019 14:26 mais il y a aussi la présentation du sujet quand on passe plus de temps à traduire qu'à résoudre le problème
C'est pas faux ...
C'est vrai que ça pique terriblement les yeux mais ça provoque aussi chez le lecteur (qui ne comprend pas pourquoi dans le cas présent Google Translate n'est pas son ami) le sentiment désabusé que soulever cette question est peine perdue Image

Re: [...]Tableau , Boucle je voudrais que ma boucle me donner le nombre du logiciel faux

Posté : sam. 09 mars 2019 15:37
par dozosama
Mikell je ne vois pas pourquoi vous me parler de google translate vue que je suis français juste des problème avec l’orthographe en général a cause d'une maladie et ça vaux aussi pour mon écriture et ma façons de m'organiser désoler pour vos yeux !
je fait du mieux que je peut et si je peut dire j'ai que 16 ans .

voila le programme me vas mais j'ai pas trop compris au programme donc si tu pourrais me l'expliquer un peut j'aimerais bien.
Merci de votre aide.

Re: [...]Tableau , Boucle je voudrais que ma boucle me donner le nombre du logiciel faux

Posté : sam. 09 mars 2019 18:46
par walkson
Bonjour,
Le problème, ce n'est pas l'orthographe, mais c'est la compréhension de votre demande ! et il me faut avouer qu'après 5 lignes de lecture, je décroche et je ne dois pas être le seul au vue du nombre de réponses à vos demandes.
Bref, passons au chose sérieuse et je reconnais ne pas être très bavard sur mon code.
Je crée un ini où j'indique le nom du logiciel et son chemin comme ceci
[commande]
logiciel 0=C:\Users\TURBO\Desktop\10_gimp-2.10.8-setup-2.exe
logiciel 1=C:\Users\TURBO\Desktop\Firefox-setup.exe
logiciel 2=C:\Users\TURBO\Desktop\TrucMuch-setup.exe
logiciel 3=
logiciel 4=
logiciel 5=
logiciel 6=
logiciel 7=
logiciel 8=
logiciel 9=
logiciel 10=
logiciel 11=
logiciel 12=
Dans le cas présent, il n'y a que 3 programmes. Il vous faudra modifier Local $prog[4] en Local $prog[13] avec le chemin des logiciels
Pour le log, on obtient ceci
2019-03-09 18:16:50 :   ~@|@~
 ___________________
|                   |
|     DEBUT log     |
|___________________|
2019-03-09 18:16:50 : logiciel 0 pour C:\Users\PC\Desktop\10_gimp-2.10.8-setup-2.exe
2019-03-09 18:16:50 : logiciel 1 pour C:\Users\PC\Desktop\Firefox-setup.exe
2019-03-09 18:16:50 : logiciel 2 pour C:\Users\PC\Desktop\TrucMuch-setup.exe
2019-03-09 18:16:50 : logiciel 3 pour
2019-03-09 18:16:50 : logiciel 4 pour
2019-03-09 18:16:50 : logiciel 5 pour
2019-03-09 18:16:50 : logiciel 6 pour
2019-03-09 18:16:50 : logiciel 7 pour
2019-03-09 18:16:50 : logiciel 8 pour
2019-03-09 18:16:50 : logiciel 9 pour
2019-03-09 18:16:50 : logiciel 10 pour
2019-03-09 18:16:50 : logiciel 11 pour
2019-03-09 18:16:50 : logiciel 12 pour
2019-03-09 18:18:17 : logiciel 0 mis à jour D:\Mes Documents D\Netconnection\10_gimp-2.10.8-setup-2.exe
2019-03-09 18:18:28 : logiciel 1 mis à jour C:\Program Files\Mozilla Firefox\Firefox-setup.exe
2019-03-09 18:18:35 : logiciel 2 mis à jour C:\Users\PC\Desktop\TrucMuch-setup-0.1.exe
2019-03-09 18:19:13 :
 ___________________
|                   |
|      Fin log      |
|___________________|
   ~©|©~
La date et l'heure sont ajoutés automatiquement
Pour le code, j'ai rajouté une boite de dialogue qui permet de rechercher le bon chemin des logiciels et de l’écrire dans le Ini
J'ai commenté le code mais si vous avez quelques questions, n'hésitez pas
#include <File.au3>
DirCreate(@ScriptDir & "\LOG")
$filelog = @ScriptDir & "\LOG\Example.log"
_FileWriteLog($filelog,@TAB & "~@|@~" & @CRLF &  " ___________________" & @CRLF & "|                   |" & @CRLF & "|     DEBUT log     |" & @CRLF & "|___________________|")
; on crée un ini la section = commande, la clé = logiciel 1 et sa valeur le chemin du logiciel
; le ini est créé juste au démarrage du code
If Not FileExists(@ScriptDir & "\monIni.ini") Then
        Local $prog[4] = [@ScriptDir & "\10_gimp-2.10.8-setup-2.exe ", @ScriptDir & "\Firefox-setup.exe ",@ScriptDir & "\TrucMuch-setup.exe ", "" ]
      ;ici je crée 3 programmes et une ligne vide, la logique voudrait qu'il y en ait 13
                For $i = 0 To 12
                        $y = $i
                        If $y > 3 Then $y = 3 ;$prog[$y]) contient 4 données de 0 à 3 donc on ne peut pas dépasser 3
                        IniWrite(@ScriptDir & "\monIni.ini","commande","logiciel " & $i, $prog[$y])
                        _FileWriteLog($filelog, "logiciel " & $i &" pour "& $prog[$y])
                Next
        ;ShellExecute( $filelog) ;première méthode
        ;ShellExecute("notepad.exe", $filelog) ;deuxième méthode
        ShellExecuteWait(@ScriptDir & "\monIni.ini")
EndIf
;================================================= fin de la première partie ===========================================================================================
; on recherche les chemins invalides
$aArray = IniReadSection(@ScriptDir & "\monIni.ini","commande") ; lecture du ini dans un tableau (array)
_ArrayDisplay($aArray);on obtient un tableau de 14 lignes et 2 colonnes

For $i = 1 To $aArray[0][0] ;$aArray[0][0] = nombre de lignes, $aArray[1][0] = nom du logiciel, $aArray[1][1] = chemin du logiciel etc....
        If Not FileExists($aArray[$i][1]) Then ;lecture du chemin en colonne 1. Si le chemin n'existe pas, on lance la fonction controlProg()
               controlProg()
        Else
                MsgBox(64,"Control",$aArray[$i][0] &" = "& $aArray[$i][1] & " est à jour", 4) ; le chemin est valide
        EndIf

Next


_FileWriteLog($filelog,@CRLF &  " ___________________" & @CRLF & "|                   |" & @CRLF & "|      Fin log      |" & @CRLF & "|___________________|" & @CRLF & @TAB & "~" & Chr(169) &"|"& Chr(169) & "~"  )
ShellExecute( $filelog)

 Func controlProg() ;si le chemin n'est pas valide
                MsgBox(16, "Control", $aArray[$i][1] & " n'existe pas !", 4)
                $fileopen = FileOpenDialog("Recherche programme: " & $aArray[$i][1], @DesktopDir,"exe(*.exe)",$FD_FILEMUSTEXIST); on ouvre la boite de dialogue pour rechercher le logiciel
                If @error Then Return SetError(1) ;quand clic annuler
                IniWrite(@ScriptDir & "\monIni.ini","commande",$aArray[$i][0], $fileopen); on modifie l'ini avec le chemin valide
                _FileWriteLog($filelog, $aArray[$i][0] & " mis à jour " & $fileopen)
EndFunc
On peut aussi modifier directement dans le Ini mais en gardant sa structure

Re: [...]Tableau , Boucle je voudrais que ma boucle me donner le nombre du logiciel faux

Posté : sam. 09 mars 2019 21:50
par walkson
après, il y a peut être plus simple que de faire une recherche de chemin non valide !
Si vous créez un dossier de base contenant des sous dossiers au nom du logiciel et que, dans chaque sous dossiers vous y placez le programme à installer, il suffit de surveiller le dossier de base à chaque démarrage de votre programme.
Seule obligation, être ordonné ! avec un programme par sous dossier sinon BUG
Voici un exemple. La première partie ne sert qu'à installer les sous dossiers et les programmes (bidons ici) pour vous donner une idée
#include <File.au3>
#include <Array.au3>
;============================================ mise en place de sous dossiers et de fichiers pour l'exemple =======================================================
;                                             en réalité, c'est à faire manuellement
DirCreate(@ScriptDir & "\Programmes")
Local $sousdossiers[13] = ["Gimp","Firefox","Chrome","PaintNet","AutoIt","Scite","NotePad","VLC","MultiMedia","machin","Bidule","Truc","Autre"]
For $i = 0 To 12
   DirCreate(@ScriptDir & "\Programmes\" & $sousdossiers[$i])
   $open = FileOpen(@ScriptDir & "\Programmes\" & $sousdossiers[$i] &"\"& $sousdossiers[$i]&"-"& $i&"."& $i + 2 &".exe",8 + 2)
   FileClose($open)
Next
;=======================================================================================================================================================
;Le but est de surveiller le dossier Programmes et de réécrire l'ini. Les chemins seront mis à jour à chaque lancement
; on cherche les Exe dans les sous dossiers de Programmes
FileDelete(@ScriptDir & "\monIni.ini");on détruit l'ini
$aArray = _FileListToArrayRec(@ScriptDir & "\Programmes", "*.exe;*.msi", $FLTAR_FILESFOLDERS ,$FLTAR_RECUR ,$FLTAR_SORT   , $FLTAR_FULLPATH)
_ArrayDisplay($aArray)
Local $key, $iValue
For $i = 1 To $aArray[0]
   If StringRight($aArray[$i], 3) = "exe" Or   StringRight($aArray[$i], 3) = "msi" Then;si la ligne se termine par "exe" ou "msi"
      $iValue = $aArray[$i] ;enregistre le chemin
   Else
      $split = StringSplit($aArray[$i],"\");on découpe le chemin du sous dossier
      $key = $split[UBound($split) - 1]; enregistre le nom du sous dossier
   EndIf

   If $key > "" And $iValue > "" And StringInStr($iValue,$key) > 0 Then;(Key=Value) si la clef et sa valeur ne sont pas vide et si le nom de la clef se retrouve dans sa valeur
      IniWrite(@ScriptDir & "\monIni.ini","command", $key, $iValue)   ;on écrit
      $key = "" ;on vide les variables pour la prochaine ligne
      $iValue = ""
   EndIf

Next

ShellExecuteWait(@ScriptDir & "\monIni.ini")
$aArray_ini = IniReadSection(@ScriptDir & "\monIni.ini","command")
_ArrayDisplay($aArray_ini)
;à partir de ce tableau, on peut nommer par exemple un bouton avec $aArray_ini[1][0] et pour son action ShellExecute($aArray_ini[1][1]) (AutoIt dans le cas présent)
 
Là encore je passe par un Ini car c'est le seul moyen de rester flexible avec les mises à jour
Le Ini est détruit au démarrage et réécrit avec les éventuelles modifications

Re: [...]Tableau , Boucle je voudrais que ma boucle me donner le nombre du logiciel faux

Posté : lun. 11 mars 2019 08:23
par dozosama
Désoler hier je n'est pas pue répondre.

Je pense qu'a partie de la je devrais essayer de comprendre tous seul et faire plusieurs test tu ma déjà beaucoup aider merci a toi.
Et au pire si j'ai d'autre question je le poserais plus tard.

Merci a toi et a tous bonne journée a tous.