Re: [..] Aide pour l'écriture d'un futur script.
Posté : mer. 16 juil. 2014 14:36
Bonjour,
je vais commenter les lignes que tu as mal comprises sur mon code, je laisserai overflow faire de même avec le sien. Mais il est essentiel que tu comprennes comment ces programmes fonctionnent pour que tu puisses réutiliser les les méthodes que l'on a utilisé. Cela dit je pars du principe que tu as compris le tutoriel sur OpenClassroom de Timmalos, je ne ferai donc pas de rappels sur les tableaux.
Les includes sont là quand on a besoin d'utiliser des fonctions qui ne sont pas directement incluses dans AutoIt. A la rigueur tu pourrais supprimer "#include <Array.au> car je ne l'ai utilisée que pour la phase de débuggage.
$mainMusicFoldersArray, le premier élément du tableau est le nombre de gros dossiers de musique que tu as décris, s'il y en a qu'un seul tu laisses le et tu modifies le chemin. S'il y'en a deux, il faut changer le format du tableau, le premier élément et rajouter le second chemin etc...
La première boucle For...Next parcours le premier tableau qui contient tes gros dossiers. On sait que le premier élément de n'importe quel tableau est au rang 0 soit $array[0]. Dans mon tableau, le rang 0 donne le nombre dossiers à parcourir. Et là tu devrais piger le truc. La variable $i donne l'index (le rang) du tableau. $i valant 1 au départ, et $mainMusicFoldersArray[0] valant 1 aussi, il y aura donc qu'un seul passage de boucle pour celle là. Logique tu n'as qu'un dossier de musique.
Telle que je l'ai appelée à cette ligne là de mon code, je demande à la fonction _FileListToArray de me renvoyer un tableau contenant le nombre de dossiers uniquement et leurs noms contenues dans la chemin $mainMusicFoldersArray[$i]. Maintenant tu sais d'après mes commentaires précédent ce qu'est finalement $mainMusicFolderArrays[$i]. Et ce tableau là correspond de la même manière au tableau des artistes contenus dans ton gros dossier.
On vérifie bien qu'il s'agisse d'un tableau pour vérifier qu'il y ait bien des dossiers, auquel cas le code ne peut pas continuer. La structure de tes dossiers n'est pas rigoureusement la même.
Encore une boucle For...Next, et celle là a la même objectif, parcourir chaque élément de tableau, sauf que là, c'est pour chaque nom d'artiste.
Le prochain _FileListToArray me permet de lister tous les dossiers toujours contenus dans le chemin $mainMusicFoldersArray[$i]\$artistNamesFoldersArray[$j]. Si tu as bien compris ce que j'ai dit, tu devrais comprendre ce que veut exactement dire cette ligne en fonction des valeurs de $i et de $j. Donc de lister le nom des albums.
Ma prochaine boucle For...Next permet maintenant de lister tous les fichiers de types wave contenus dans chaque albums. C'est ici aussi qu'on commence par initialiser la variable qui va nous permettre de donner le numéro de la chanson.
Une fois les musiques listées dans un tableau ($musicsArray), on renomme le fichier comme désiré. Le charabia comme tu dis, tu devais être en mesure de le comprendre si tu sais ce que peut donner les différentes variables du type : $array[$a], en fonction des valeurs de $i, $j, $k, $e. Le premier argument de FileMove est la source, facile. Le second et la destination des fichiers, on laisse le même chemin donc on se répète par contre la dernière partie (le nom du fichier) change, et on le renomme de la manière suivante : Artiste - Album - chanson - numéro .wav.
La fonction _GetMusicName($file) n'existe pas, c'est moi qui l'ai faite. Tu le vois car à la fin du script il y a Func _GetMusicName... EndFunc.
A quoi elle sert, en fait le problème est que $musicsArray[$e] me donne le nom d'une musique.wav. Or si je n'avais pas la fonction, le nom de tes musiques serait : Artiste - Album - musique.wav n.wav. En gros une extension se baladerait au milieu et c'est pas beau. Il fallait donc trouver un moyen de virer l'extension. La fonction _GetMusicName($file) renvoie le nom de $file mais sans l'extension.
Elle marche de la manière suivante. Je partage la chaîne de caractères en fonction d'un délimiteur : le point. On sait qu'une extension c'est fichier.ext. Ainsi, le dernier élément du tableau renvoyé par StringSplit est forcément l'extension du fichier. Par conséquent, je peux reconstruire le nom de la musique mais sans l'extension, en ajoutant peu à peu chaque élément de la musique sauf le dernier (l'extension), c'est pourquoi la boucle For...Next ne va pas jusqu'à $tempArray[0] le dernier index tu tableau puisqu'il s'agit de l'extension. La boucle va donc à $tempArray[0]-1.
La fonction retourne donc le nom de la musique sans l'extension. Par défaut, elle renvoie le même nom qui a été donné.
EDIT : Je te fais une sorte de résumé. En gros mon programme fait ça :
En espérant que les choses soient claires ! Bonne continuation !
je vais commenter les lignes que tu as mal comprises sur mon code, je laisserai overflow faire de même avec le sien. Mais il est essentiel que tu comprennes comment ces programmes fonctionnent pour que tu puisses réutiliser les les méthodes que l'on a utilisé. Cela dit je pars du principe que tu as compris le tutoriel sur OpenClassroom de Timmalos, je ne ferai donc pas de rappels sur les tableaux.
Les includes sont là quand on a besoin d'utiliser des fonctions qui ne sont pas directement incluses dans AutoIt. A la rigueur tu pourrais supprimer "#include <Array.au> car je ne l'ai utilisée que pour la phase de débuggage.
$mainMusicFoldersArray, le premier élément du tableau est le nombre de gros dossiers de musique que tu as décris, s'il y en a qu'un seul tu laisses le et tu modifies le chemin. S'il y'en a deux, il faut changer le format du tableau, le premier élément et rajouter le second chemin etc...
La première boucle For...Next parcours le premier tableau qui contient tes gros dossiers. On sait que le premier élément de n'importe quel tableau est au rang 0 soit $array[0]. Dans mon tableau, le rang 0 donne le nombre dossiers à parcourir. Et là tu devrais piger le truc. La variable $i donne l'index (le rang) du tableau. $i valant 1 au départ, et $mainMusicFoldersArray[0] valant 1 aussi, il y aura donc qu'un seul passage de boucle pour celle là. Logique tu n'as qu'un dossier de musique.
Telle que je l'ai appelée à cette ligne là de mon code, je demande à la fonction _FileListToArray de me renvoyer un tableau contenant le nombre de dossiers uniquement et leurs noms contenues dans la chemin $mainMusicFoldersArray[$i]. Maintenant tu sais d'après mes commentaires précédent ce qu'est finalement $mainMusicFolderArrays[$i]. Et ce tableau là correspond de la même manière au tableau des artistes contenus dans ton gros dossier.
On vérifie bien qu'il s'agisse d'un tableau pour vérifier qu'il y ait bien des dossiers, auquel cas le code ne peut pas continuer. La structure de tes dossiers n'est pas rigoureusement la même.
Encore une boucle For...Next, et celle là a la même objectif, parcourir chaque élément de tableau, sauf que là, c'est pour chaque nom d'artiste.
Le prochain _FileListToArray me permet de lister tous les dossiers toujours contenus dans le chemin $mainMusicFoldersArray[$i]\$artistNamesFoldersArray[$j]. Si tu as bien compris ce que j'ai dit, tu devrais comprendre ce que veut exactement dire cette ligne en fonction des valeurs de $i et de $j. Donc de lister le nom des albums.
Ma prochaine boucle For...Next permet maintenant de lister tous les fichiers de types wave contenus dans chaque albums. C'est ici aussi qu'on commence par initialiser la variable qui va nous permettre de donner le numéro de la chanson.
Une fois les musiques listées dans un tableau ($musicsArray), on renomme le fichier comme désiré. Le charabia comme tu dis, tu devais être en mesure de le comprendre si tu sais ce que peut donner les différentes variables du type : $array[$a], en fonction des valeurs de $i, $j, $k, $e. Le premier argument de FileMove est la source, facile. Le second et la destination des fichiers, on laisse le même chemin donc on se répète par contre la dernière partie (le nom du fichier) change, et on le renomme de la manière suivante : Artiste - Album - chanson - numéro .wav.
La fonction _GetMusicName($file) n'existe pas, c'est moi qui l'ai faite. Tu le vois car à la fin du script il y a Func _GetMusicName... EndFunc.
A quoi elle sert, en fait le problème est que $musicsArray[$e] me donne le nom d'une musique.wav. Or si je n'avais pas la fonction, le nom de tes musiques serait : Artiste - Album - musique.wav n.wav. En gros une extension se baladerait au milieu et c'est pas beau. Il fallait donc trouver un moyen de virer l'extension. La fonction _GetMusicName($file) renvoie le nom de $file mais sans l'extension.
Elle marche de la manière suivante. Je partage la chaîne de caractères en fonction d'un délimiteur : le point. On sait qu'une extension c'est fichier.ext. Ainsi, le dernier élément du tableau renvoyé par StringSplit est forcément l'extension du fichier. Par conséquent, je peux reconstruire le nom de la musique mais sans l'extension, en ajoutant peu à peu chaque élément de la musique sauf le dernier (l'extension), c'est pourquoi la boucle For...Next ne va pas jusqu'à $tempArray[0] le dernier index tu tableau puisqu'il s'agit de l'extension. La boucle va donc à $tempArray[0]-1.
La fonction retourne donc le nom de la musique sans l'extension. Par défaut, elle renvoie le même nom qui a été donné.
EDIT : Je te fais une sorte de résumé. En gros mon programme fait ça :
Code : Tout sélectionner
Pour chaque gros dossier de musiques, tu
listes le nombre de dossiers (artistes) contenus dans le dossier de musique, dans un tableau
si la liste est bien un tableau, alors
Pour chaque artiste, tu
listes le nombre de dossiers (albums) contenus dans le dossier de l'artiste, dans un tableau
si la liste est bien un tableau, alors
Pour chaque album, tu
mets le numéro de la musique à 1
listes le nombres de fichiers.wav (musiques) contenus dans le dossier de l'album, dans un tableau
si la liste est bien un tableau, alors
Pour chaque musique, tu
renommes le fichier (musique) de la manière suivante : artiste - album - nom de la musique sans extension numéro de la musique.wav
on rajoute 1 au numéro de la musique
FinPour
FinSi
FinPour
FinSi
FinPour
FinSi
FinPour