[R] Alléger le contenu d'un dossier

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
brolee93
Niveau 2
Niveau 2
Messages : 20
Enregistré le : lun. 14 oct. 2013 22:24
Localisation : Paris et 77
Status : Hors ligne

[R] Alléger le contenu d'un dossier

#1

Message par brolee93 »

Bonjour les amis ,

Je travaille sur un script afin d'alléger mes applis android (je fais des roms pour Android )
Les applis contiennent des dossiers avec plusieurs tailles de png qui sont pour tous les mobiles (full hd , HD , ecran standard etc) mais moi comme je suis en XHDPI j'aimerai garder que les png xhdpi et supprimer tous les doublons qui sont placés dans les autres dossiers (même nom de png mais pas la même taille)
j'ai fait mon script mais il est lent, très lent même, surtout à partir de plus 100 fichiers du type .png et .jpg.
je vous montre un bout du code , j'utilise la fonction "search" bien que j'en suis sûr que "filelistarray" marcherait et aussi je suis sûr que ce serait plus rapide.

En gros c'est du style de Kdiff si vous connaissez sauf que je veux qu'il me supprime tous mes fichiers inutile.
Le But :
étape 1:Lister tous les répertoires contenant des png/jpg
étape 2:Choisir son répertoire par défaut car ce répertoire doit évidement rester intact par exemple:
drawable-xhdpi
étape 3:Ensuite le logiciel doit scanner TOUS les PNG et JPG dans ce dossier (étape2) puis les lister ou les placer en variables .
étape 4:le logiciel doit scanner tous les dossiers de l'étape 1 puis supprimer tous les png/jpg qui possèdent les même noms que dans le dossier par défaut (les tailles sont en principe différente donc se baser sur le nom est une bonne base )
étape 5: Good :) on passe au second dossier par défaut mais ça je saurai le faire ^^

En gros j'ai besoin d'aide pour le raccourcir car j'ai entré 90 entrées de possibilité de dossier et je ne veux qu'il exectue dans tous les dossier commençant par:"drawable-xxxxxxxx" vu que le nom est aléatoire lol donc voila pourquoi j'ai mis 90 entrées de dossier lol

Voici mon bout de code .
► Afficher le texte
Modifié en dernier par brolee93 le jeu. 26 déc. 2013 10:54, modifié 1 fois.
BroLee
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#2

Message par bloodwolff »

J'espère que cela vous conviendra. bien sur l'interface est à refaire selon vos besoins.
Le fichier choisis dans la combobox sera celui qui restera intact.
Il faudra peut-être ajouter une 3e wildcard car je sais que les .jpg peuvent également s'écrire .jpeg.

Sur ce bonne soirée et si vous avez le moindre problème je suis la :D
► Afficher le texte
Compte skype : bloodwolfff
Avatar du membre
brolee93
Niveau 2
Niveau 2
Messages : 20
Enregistré le : lun. 14 oct. 2013 22:24
Localisation : Paris et 77
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#3

Message par brolee93 »

Je look ceci et je test . effectivement ça fait beaucoup moins de lignes ^^ J’espère surtout c'est que ça sera bien plus rapide .
Merci encore je go tester ceci.
UN GRAND MERCI

Il me retourne ce pb :
C:\_ApkTool_Team-ReDroiD\projects\framework-res.apk\resC:\Dropbox\Cours Lionel\auto-It\Light-App.au3 (51) : ==> Array variable subscript badly formatted.:
dim $array[$1List[0] + $2List[0]]
dim $array[^ ERROR
BroLee
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#4

Message par bloodwolff »

Ce sont des erreurs quand il ne trouve aucun fichier a supprimer dans un dossier
il suffit d'ajouter des vérifications
► Afficher le texte
Compte skype : bloodwolfff
Avatar du membre
brolee93
Niveau 2
Niveau 2
Messages : 20
Enregistré le : lun. 14 oct. 2013 22:24
Localisation : Paris et 77
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#5

Message par brolee93 »

lol c'est un dossier qui contient plus de 2250fichiers png/jpg LOL
je vais tester avec vos mod


la c'est ok 23sec avec votre script :) contre 12min avec le mien LOL la GIFLE ^^ aieee

Par contre est il possible qu'il évite un nettoyage dans les répertoire mipmap- xxxxx
Car ceux la j'aimerai les faire dans un second temps ?

Sinon pour nettoyer ensuite les dossiers vide ?
;Suppression des dossiers vide :

$size = DirGetSize($dirMIPMPAP_2)
If $size = 0 Then DirRemove($dirMIPMPAP_2)
il n'existe pas une fonction de ce type qui va supprimer tous les dossiers vide du au nettoyage des doublons ? dans le répertoire de base .



Merci pour tout franchement
BroLee
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#6

Message par bloodwolff »

Si ma supposition est bonne vous ne voulez que nettoyer les dossiers commençant par drawable- ?
Si oui la solution est plus bas
Pour le dirgetsize() vous aviez totalement raison il vous suffit de savoir ou le placez dans la boucle :P
► Afficher le texte
Compte skype : bloodwolfff
Avatar du membre
brolee93
Niveau 2
Niveau 2
Messages : 20
Enregistré le : lun. 14 oct. 2013 22:24
Localisation : Paris et 77
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#7

Message par brolee93 »

Ouath récatif et opérationnel ;) j'adore . en plus ca fonctionne et c'est vachement rapide .
juste l'auto suppression des dossiers vide qui ne fonctionne pas je vais chercher un peu mais la au boulot il ne me laisse pas le temps lol .


Code : Tout sélectionner

if (DirGetSize($listDir[0]) == 0) Then _
                          DirRemove($listDir[0])
c'est plutôt :

Code : Tout sélectionner

if (DirGetSize($listDir[0]) == 0) Then _
                          DirRemove($listDir[$i])
et la c'est good


Maintenant c'est parfait qu'il enleve les doublons dans les dossiers :drawables-
Par contre une légere contrainte j'aimerai qu'il evite les dossiers qui se nomme "land" exemple drawables-land-xhdpi ou drawable-sw-350dp-land-xhdpi
mais la aucune idée :/
BroLee
Avatar du membre
GhostLine
Niveau 7
Niveau 7
Messages : 342
Enregistré le : jeu. 12 mars 2009 15:28
Localisation : Paris
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#8

Message par GhostLine »

J'utiliserai stringsplit , pour ma part, avec "land" comme délimiteur. Je te laisse zieuter l'aide de stringsplit pour voir ce que tu pourras en faire :)
Avatar du membre
brolee93
Niveau 2
Niveau 2
Messages : 20
Enregistré le : lun. 14 oct. 2013 22:24
Localisation : Paris et 77
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#9

Message par brolee93 »

GhostLine a écrit :J'utiliserai stringsplit , pour ma part, avec "land" comme délimiteur. Je te laisse zieuter l'aide de stringsplit pour voir ce que tu pourras en faire :)
Très bien la je suis dans un autre centre donc je me reinstall le tout pour voir voir tout ceci


ohhh ton stringslip j'y arrive pas lol ^^
et l'aide moue je vois pas trop d'aide lol enfin ce n'est pas super clair

Déjà assimilé tous ce splendide code me donne mal au crane lol


Edit :

Bon j'ai commencé et bien avancé now il fait tout tout seul ;) Merci encore c'est vraiment plaisant car cest super rapide ça déchire un grand Merci .
j'ai rajouter le scan des dossiers mipmap puis des dossiers raw et un déplacement temporaire des dossiers values (langues) dans un autre dossier car pour la recompile parfois il est nécessaire d'en récupérer quelques-un .
Maintenant je lutte pour trouvé comment lui dire de ne pas prendre en compte les dossiers drawable contenant le mot "land" je chercher je cherche mais bon je risque peux être de trouver lol :mrgreen: OU pas :oops:
BroLee
Avatar du membre
brolee93
Niveau 2
Niveau 2
Messages : 20
Enregistré le : lun. 14 oct. 2013 22:24
Localisation : Paris et 77
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#10

Message par brolee93 »

Très sincèrement je suis perdu :/

Code : Tout sélectionner

            $foundland = StringSplit ($mainDir& "\res" & "\" & $listDir[0] , "land" , 1)
_ArrayDisplay($foundland, "test" ,-1)   ; AFFICHAGE LISTE COMPLETE
MsgBox(4096, "folder found:", $foundland[0])

Il m'affiche juste qu'il y a 10 dossiers mais moi je cela ne m'interesse pas lol sachant qu'il y a 3 dossiers "land"
BroLee
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#11

Message par bloodwolff »

brolee93 a écrit :Ouath récatif et opérationnel ;) j'adore . en plus ca fonctionne et c'est vachement rapide .
juste l'auto suppression des dossiers vide qui ne fonctionne pas je vais chercher un peu mais la au boulot il ne me laisse pas le temps lol .


Code : Tout sélectionner

if (DirGetSize($listDir[0]) == 0) Then _
                          DirRemove($listDir[0])
c'est plutôt :

Code : Tout sélectionner

if (DirGetSize($listDir[0]) == 0) Then _
                          DirRemove($listDir[$i])
et la c'est good


Maintenant c'est parfait qu'il enleve les doublons dans les dossiers :drawables-
Par contre une légere contrainte j'aimerai qu'il evite les dossiers qui se nomme "land" exemple drawables-land-xhdpi ou drawable-sw-350dp-land-xhdpi
mais la aucune idée :/
Bien vu, une petite erreur de ma part ^^ Faut dire que je test rarement ce que j'envoie

Pour le problème de land j'irais avec un truc du genre
► Afficher le texte
Et sinon cela risque de mieux fonctionner encore

Code : Tout sélectionner

if (DirGetSize($listDir[[color=#FF0000]$i[/color]]) == 0) Then _
                          DirRemove($listDir[$i])
Compte skype : bloodwolfff
Avatar du membre
brolee93
Niveau 2
Niveau 2
Messages : 20
Enregistré le : lun. 14 oct. 2013 22:24
Localisation : Paris et 77
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#12

Message par brolee93 »

Tu ne test pas pourtant ça tourne vraiment pas mal Chapeau bas monsieur ;=)


et non j'ai cette erreur moi lol
(23) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$ComboDataText &= "|" & $listDir[$i]
$ComboDataText &= "|" & ^ ERROR
->10:34:12 AutoIt3.exe ended.rc:1

avec ta manip "LAND"

sinon pour le delete ça n'a fonctionner qu'avec ceci :

Code : Tout sélectionner

  if (DirGetSize($mainDir& "\res" & "\" & $listDir[$i]) == 0) Then _
                          DirRemove($mainDir& "\res" & "\" & $listDir[$i] , 1)
                EndIf

Avec ceci pas d'erreur mais il supprimer tout de meme les fichiers dans les dossiers land :/

Code : Tout sélectionner

$listDir = _FileListToArray($mainDir & "\res", "drawable*", 2)
For $i = $listDir[0] To 1 step -1
    If StringInStr($listDir[0], "land") <> 0 Then _
        _ArrayDelete($listDir, $i)
Next
$ComboDataText = ""
BroLee
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#13

Message par bloodwolff »

Si vous avez besoin de rajouter le paramètre 1 à dirRemove ce n'est pas nécessairement une bonne nouvelle
Sois vos dossiers contiennent d'autre dossier vide sois il supprime des dossiers qui contiennent encore des images
Avec votre correction je vois que j'avais oublier de spécifier le chemin complet lors de cette commande, j'en suis désolé

Pour le second problème je présume qu'il supprimait bien les dossiers land quand il provoquait une erreur, il n'actualisais simplement pas le nombre de dossiers

Code : Tout sélectionner

For $i = $listDir[0] To 1 step -1
    If StringInStr($listDir[$i], "land") <> 0 Then _
        _ArrayDelete($listDir, $i)
Next
[color=#FF0000]$listDir[0] = UBound($listDir) - 1[/color]
Et par simple curiosité, si vous rajouter res dans les paths, pourquoi ne pas directement sélectionner ce dossier res au départ ?
Compte skype : bloodwolfff
Avatar du membre
brolee93
Niveau 2
Niveau 2
Messages : 20
Enregistré le : lun. 14 oct. 2013 22:24
Localisation : Paris et 77
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#14

Message par brolee93 »

► Afficher le texte
comme ça je selectionne le dossier de départ puis ensuite il rentre dans res automatiquement


EDIT

Cool maintenant votre modification fonctionne :)
► Afficher le texte
BroLee
Avatar du membre
brolee93
Niveau 2
Niveau 2
Messages : 20
Enregistré le : lun. 14 oct. 2013 22:24
Localisation : Paris et 77
Status : Hors ligne

Re: [..] Alléger le contenu d'un dossier

#15

Message par brolee93 »

Franchement j'ai rajouter quelques lignes et ce n'est que du bonheur :) j'adore c'est vraiment super pratique et ça tourne au poil .
Un magnifique cadeau de noël . Joyeux Noël et merci beaucoup .



Edit :
Bon franchement je suis pas doué j'ai essayer pleins de manipulation pour maintenant supprimer les png/pjg dans les recpertoire contenant le mot Land mais pas moyen j'ai pourtant tenté avec tous les bouts de script précédent mais rien de fonctionne :/ une idée svp ?
BroLee
Répondre