Page 1 sur 1

[...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : mar. 16 févr. 2010 19:25
par pierre
Bonjour,

le sujet n'est peut être pas le plus adéquat... mais là est le problème (je suppose).

J'ai un script qui choisi des fichier au hasard et enregistre le chiffre (random) dans un fichier .ini pour éviter qu'il n'apparaisse 2 fois. Or, la boucle continue même une fois que le fichier est choisi ce qui fait que je me retrouve avec des fichiers qui s'ouvrent toutes les 5 secondes...
► Afficher le texte
Je suis plutôt débutant en codage, je pense d'ailleurs que cela est flagrant vu mon code ;) J'ai essayé une quantité de solutions et glaner sur les topics mais rien n'y fait... Un codeur aguerri ou non pourrait il me dire ce qui ne va pas svp ?

Re: [...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : mar. 16 févr. 2010 20:44
par Tlem
335 lignes de code !!!
Je préfèrerais un fichier joint car là ca commence à faire beaucoup.

J'ai survolé le code et j'avoue avoir du mal à tout comprendre. :?
Juste une remarque, lorsque vous testez la valeur de retour d'une Msgbox, vous utilisez la valeur 1276 !!!
D'où vous vient cette valeur ? Car dans la documentation cela va de 1 à 11. :roll:

Ensuite, vous pourriez diminuer les 50 premières lignes en utilisant une simple fonction pour l'écriture de vos fichiers .ini.
► Afficher le texte
Idem pour la fin. ;)

Re: [...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : mer. 17 févr. 2010 05:06
par SagePourpre
@Tlem : Ta fonction a été faite à la hâte n'est-ce pas ?
Sous sa forme actuelle, elle ne pourrait pas fonctionner


@Pierre
Tu aurais grandement avantage à apprendre à utiliser
eval et assign en conjonction avec les boucles.
Tu pourrais écrire le même code avec beaucoup moins de lignes
( facilement 50 % de lignes en moins ) et par conséquent, trouver
une simple erreur serait une tâche moins ardue.

Par exemple :

Code : Tout sélectionner

$bla = StringSplit($str,";;",1)
$bla1 = StringSplit($str1,";;",1)
$bla2 = StringSplit($str2,";;",1)
$bla3 = StringSplit($str3,";;",1)
$bla4 = StringSplit($str4,";;",1)
$bla5 = StringSplit($str5,";;",1)
$bla6 = StringSplit($str6,";;",1)
$bla7 = StringSplit($str7,";;",1)
pourrait très bien être réduit à :

Code : Tout sélectionner

For $i = 0 To 8
    Assign("bla" & $i,StringSplit(Eval("str" & $i),";;",1),2)
Next
Si tu as de la difficulté à comprendre ce bout de code, le voilà sous sa
plus simple expression.

Code : Tout sélectionner

For $i = 0 To 8 
    $eval = Eval("str" & $i)
    $data = StringSplit($eval,";;",1)
    Assign("bla" & $i,$data,2)
    Next
En plus de prendre moins de lignes, la modification de ces lignes devient beaucoup moins
pénible puisque tu peux affecter l'intégralité de cette section de code d'un seul coup.


Sinon, en survolant ton code, je n'ai pas aperçu l'erreur mais pour t'aider tu peux ajouter
cette ligne au début de ton code afin de déterminer les lignes de codes sur lesquelles ton
code se répète à l'infini.

Code : Tout sélectionner

Opt("TrayIconDebug",1)
Aussi, n'hésite pas à intégrer des "msgbox" aux endroits clés pour t'aider
à débugger le code.

Re: [...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : mer. 17 févr. 2010 07:05
par Tlem
Oups .... :oops:
J'ai effectivement oublié de placer la variable du fichier dans la fonction.
J'ai sans doute été interrompu lors de la rédaction du message. ;)

J'ai corrigé le code.
Merci.

Re: [...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : mer. 17 févr. 2010 10:21
par pierre
Merci pour ces astuces qui vont me simplifier la vie ! Je n'avais jamais utilisé les fonctions assign et eval et n'y avait même jamais pensé ! Je sais que d'autres choses peuvent être améliorées telle que un seul fichier .ini en utilisant plusieurs sections mais je n'est pas réussi ( et puis tant que ça marche :cry: ).

Quelques explications sur le code : une msgbox me propose 2 choix :
- le premier choix: EtuLicPro (ouvre le dossier .rar, choisi un fichier au hasard (parmi les 1276), et enregistre le chiffre dans le fichier .ini). Les fichiers sont sélectionnés très simplement : boucle send down puis send enter.
(Tlem, la valeur de retour de la msgbox avec la valeur 1276 me sert à réinitialiser le fichier .ini, mais pour l'instant je ne l'utilise pas)
► Afficher le texte
Cette partie là fonctionne sans aucun problème.

- le second choix : All Etu (choix aléatoire parmi 6 dossiers .rar, ouvre dossier .rar puis choix aléatoire d'un fichier, puis enregistre le chiffre dans le fichier .ini correspondant).
Et là ça fonctionne à moitié : c'est à dire que les choix aléatoire s'effectuent et un fichier s'ouvre, mais au lieu de s'arrêter là (comme pour la partie précédente), les choix aléatoires continuent et les fichiers s'ouvrent continuellement (jusqu'à erreur de winrar).
► Afficher le texte
Il n'y a donc pas d'erreur "réelle" mais un défaut dans mon codage (oui, il y en a même plusieurs j'imagine ;) ). Cela peut il venir du fait que les fonction case et if soient incompatibles ? Bref, comment faire ?

je joint le fichier en l'état et ses 335 lignes !

merci

Re: [...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : mer. 17 févr. 2010 16:36
par SagePourpre
Pour écrire plusieurs section dans le même fichier ini, c'est aussi simple que

Code : Tout sélectionner

$ini = "Fichier.ini"
IniWrite($ini,"Section 1","Élément 1","value")
IniWrite($ini,"Section 1","key 2","Blu !!!")
Personnellement, je préfère mettre le nom de mon fichier dans une variable car ça me facilite la tâche
si jamais je souhaite changer le nom de fichier par la suite, mais ce n'est pas obligatoire.

Re: [...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : mer. 17 févr. 2010 19:05
par Tlem
Pouvez-vous synthétiser la fonction de votre script, car je comprend que c'est pour extraire des fichiers d'une archive, mais je ne comprend pas pourquoi vous passez par l'interface graphique !

Re: [...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : jeu. 18 févr. 2010 11:31
par pierre
synthétiser la fonction du script, c'est à dire ?
La fonction principale est d'ouvrir un fichier aléatoirement dans un des 6 dossiers .rar et de ne pas retomber sur ce même dossier. Le but est de vérifier des documents administratifs (sous divers formats) au hasard en sachant qu'ils ne pourront pas tous être vérifié par manque de temps. La fonction random a montré ses limites car nous retombions régulièrement sur les mêmes fichiers, d'où l'utilisation des .ini)
J'ai fait ce code avec mon niveau (faible), la gui n'est peut être donc pas nécessaire mais c'est peut être plus "convivial". Cela me permettait aussi d'avoir 1 seul script au lieu de deux (un script pour un seul dossier .rar (indépendant) + un script pour les 6 autres .rar).
Je ne sais pas si je suis clair et si cela répond à vos questions...

Re: [...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : jeu. 18 févr. 2010 13:42
par Tlem
pierre a écrit :synthétiser la fonction du script, c'est à dire ?
Hé bien faire ce que vous avez fait ... :lol:

Bon, sinon pour votre cas, je vous conseillerait plutôt de trouver une solution plus 'ergonomique'.

Si vous utilisiez l'UDF Unrar (voir forum Anglais), ou 7zip afin de lister les fichiers contenu dans votre archive, il serait sans doute plus simple de choisir un nombre de fichier aléatoire plus rapidement. ;)

Re: [...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : jeu. 18 févr. 2010 14:21
par pierre
7zip ne fonctionne hélas pas avec du .rar
Pour l'UDF Unrar, vous m'aviez déjà dirigé vers cette solution dans un précédent post. Ce qui me chagrine, c'est de revoir tout mon code alors qu'il fonctionnait presque... Je vais tout de même essayer et certainement revenir avec d'autres questions sur le forum :) .

Re: [...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : jeu. 18 févr. 2010 17:59
par Tlem
Il fonctionne sans doute 'presque', mais pas complètement ... :lol:
Et puis en cas de modification (sur l'affichage de Winrar ou autre) cela risque de poser des problèmes et de ne plus fonctionner.

En ce qui concerne 7Zip et les archives RAR, vous êtes sur que cela ne fonctionne pas, car sur mon PC, 7Zip ouvre sans aucun problème les fichiers .rar.

Re: [...] Boucle qui devrait s'arrêter mais qui ne le fait pas

Posté : sam. 20 févr. 2010 17:00
par pierre
je n'ai pas réussi à ouvrir du rar avec 7zip, mais je vais réessaierai
Tlem a écrit :Il fonctionne sans doute 'presque', mais pas complètement ... :lol:
.
c'est bien là le problème !!!!! et moi qui pensais qu'une simple modif dans mon script aurait suffit...
Il semblerai que je peux recommencer de zéro :((