[Ex] Copie De Fichiers Aleatoires

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

[Ex] Copie De Fichiers Aleatoires

#1

Message par timmalos »

Bonjour A Tous

Ayant recemment, et comme beaucoup de francais, acheté un cadre photo numérique, j'ai fait un petit programme qui me permet d'aller chercher sur mon disque mes photos (environ 8 gigas) d'en prendre 300 aléatoirement et de les copier sur ma clef USB.
Ca peut servir à quelques personnes, facilement améliorable/modifiable.

Code : Tout sélectionner

#include<Array.au3>
#include "FileListToArrayEx.au3"

$adresse = "D:\photos\"
$nombre_photos = 100
$copy_to = "K:\"


MsgBox(0,"","Le Script va maintenant partir à la recherche de vos images... Patientez, cela peut prendre quelques minutes pour les très très gros dossiers")
Global $alea[$nombre_photos] , $i
Global $ar_Array = _FileListToArrayEx ($adresse, "*.jpg", 1, "", True)


For $i = 0 to $nombre_photos - 1
    $alea[$i] = Random(1,$ar_Array[0],1)
Next
MsgBox(0,"","Felicitations ! Les Images ont été choisis avec plaisir, et le script va maintenant les copier sur votre Disque Externe (USB, Mini-SD, etc...)")

;_ArrayDisplay($ar_Array, "Liste fichier")  ; Ceci est facultatif, c'est juste pour afficher la liste des fichiers.#cs ----------------------------------------------------------------------------

ProgressOn("Progression","Copie des fichiers sur la clef USB en cours")
For $i = 0 to $nombre_photos - 1
    FileCopy($ar_Array[$alea[$i]],$copy_to)
    ProgressSet(Int((100*$i)/$nombre_photos),Int((100*$i)/$nombre_photos) & " %")
Next
ProgressOff()
MsgBox(0,"","Maintenant, Profitez de la vie !!!")
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: Copie De Fichiers Aleatoires

#2

Message par timmalos »

Pour info , je suis passé par Random et pas un _ArraySwap ou Autre à cause de la probable taille de l'array ;)
Mettez le disque c:\ vous comprendrez.
TaPuZ
Niveau 4
Niveau 4
Messages : 75
Enregistré le : jeu. 14 mai 2009 17:10
Status : Hors ligne

Re: [Ex] Copie De Fichiers Aleatoires

#3

Message par TaPuZ »

Joli, et sympathique de ta part de partager.
Je me posais une question. Tu es parti du principe où le nombre de photos dans le dossier était fini et connu, et que tu en prenais un % parmi ce pool, de manière aléatoire.
J'avais déjà vu (sur l'ancien forum, il me semble) un moyen de connaitre le nombre de fichiers présent dans un dossier (mais je ne retrouve pas la fonction).
On pourrait prévoir qu'il "détecte" le nombre total de photo, et qu'il en prélève un % aléatoire. Ainsi, pas besoin de changer le script à chaque fois qu'on rajoute des photos.
Quelqu'un se rappelle-t-il de cette fonction?

A bientôt,
T@PµZ
A bientôt,
T@PµZ.
____________________________________
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [Ex] Copie De Fichiers Aleatoires

#4

Message par ani »

$ar_Array[0] renvoi le nombre de fichier trouvé.
nombre photo = 100 < limité à cent.
TaPuZ
Niveau 4
Niveau 4
Messages : 75
Enregistré le : jeu. 14 mai 2009 17:10
Status : Hors ligne

Re: [Ex] Copie De Fichiers Aleatoires

#5

Message par TaPuZ »

J'ai enfin pu démontrer mon spécial! Mettre les pieds dans le plat! :mrgreen:
Merci pour l'info que j'avais sous les yeux. Effectivement, c'est ça.
Comment faire, si on veut renvoyer un nombre de dossiers, au lieu d'un nombre de fichiers?
Ou si on veut juste le nombre de fichiers images (tif, bmp, jpg, ...)?
Je sais, je sais, c'est pas mon topic, mais ça m'intéresse.
Merci encore.
A bientôt,
T@PµZ.
____________________________________
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Ex] Copie De Fichiers Aleatoires

#6

Message par timmalos »

Merci Ani pour l'editage du titre :lol:



TaPuZ, comme Ani te la expliqué, je ne connais pas le nombres de photos.

La fonction _FileListToArrayEx (Disponible dans Fonctions, post par Tlem) va chercher toutes les images et renvoie une array avec en position 0 le nombre de fichiers trouvés, ici le nombre d'images.


Mais chez moi, j'ai beaucoup trop d'images pour que ma clef USB les supportent tous. Donc le nombre_photo correspond au nombre d'images que tu souhaite transferer aleatoirement sur ta clef USB.

Je monte le chiffre a 500, bon rapport Temps/Nb Photos sur une clef USB 1 Giga , et ca me permet de prendre les photos aleatoirements je ne les choisis pas.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Ex] Copie De Fichiers Aleatoires

#7

Message par timmalos »

Comment faire, si on veut renvoyer un nombre de dossiers, au lieu d'un nombre de fichiers?

Code : Tout sélectionner

Global $ar_Array = _FileListToArrayEx ($adresse, "*.jpg", 2, "", False)
Va retourner tous les dossiers(pas les fichiers) d'un dossier, SANS prendre les SOUS-DOSSIERS

Code : Tout sélectionner

Global $ar_Array = _FileListToArrayEx ($adresse, "*.jpg", 2, "", TRUE)
Va retourner le nombre total de Dossiers dans $adresse recursivement, c'est à dire en prenant en compte TOUS les sous-dossiers.

Ou si on veut juste le nombre de fichiers images (tif, bmp, jpg, ...)?

Code : Tout sélectionner

Global $ar_Array = _FileListToArrayEx ($adresse, "*.jpg", 1, "", TRUE)
Global $ar_Array2 = _FileListToArrayEx ($adresse, "*.bmp", 1, "", TRUE)
Global $ar_Array3 = _FileListToArrayEx ($adresse, "*.tif", 1, "", TRUE)

$nombre_images = $ar_Array[0] +  $ar_Arra2[0] +  $ar_Array3[0]
Mais je pense qu'on peut faire mieux, mais la pas trop le temps.
TaPuZ
Niveau 4
Niveau 4
Messages : 75
Enregistré le : jeu. 14 mai 2009 17:10
Status : Hors ligne

Re: [Ex] Copie De Fichiers Aleatoires

#8

Message par TaPuZ »

Merci pour toutes ces réponses! J'ai enfin compris la fonction array!
Merci, j'étais à côté de la plaque à ce niveau.

EDIT : Juste un souci... Je dois encore merder, mais...
Global $ar_Array = _FileListToArrayEx ($adresse, "*.jpg", 2, "", False)
Est-ce que ça ne renvoit pas plutôt tout ce qui n'est pas fichier jpg? Et du coup, s'il s'agit d'un mélange de plein de fichiers? Ca fonctionne aussi?

Merci, A+
A bientôt,
T@PµZ.
____________________________________
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Copie De Fichiers Aleatoires

#9

Message par Tlem »

@TaPuZ
Vous devriez lire ce qui est écrit en haut de la fonction.
Cette première partie énumère les paramètres et donne leur fonction et valeurs.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [Ex] Copie De Fichiers Aleatoires

#10

Message par tolf »

timmalos a écrit :

Code : Tout sélectionner

...
For $i = 0 to $nombre_photos - 1
    $alea[$i] = Random(1,$ar_Array[0],1)
Next
....
Petit problème envisageable : si Random renvoie deux fois le même nombre au cours de la sélection des photos, il y aura des photos en double donc il faut vérifier que la photo n'ait pas déjà été choisie (à moins que ce soit le but recherché :lol: ) :

Code : Tout sélectionner

Func _VerifiePhoto($alea, $iPhoto, $iRandom)
    Local $i
    For $i = 0 To $iPhoto
        If $alea[$i] = $iRandom Then Return 0
    Next
    Return 1
EndFunc
A intégrer dans le code :

Code : Tout sélectionner

For $i = 0 to $nombre_photos - 1
    Do
        $iRandom = Random(1,$ar_Array[0],1)
    Until _VerifiePhoto($alea, $i, $iRandom) = 1
    $alea[$i] = $iRandom
Next
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
TaPuZ
Niveau 4
Niveau 4
Messages : 75
Enregistré le : jeu. 14 mai 2009 17:10
Status : Hors ligne

Re: [Ex] Copie De Fichiers Aleatoires

#11

Message par TaPuZ »

@Tlem : Oops :oops: :oops: ! Un chti problème de comprenette aujourd'hui! J'ai pourtant relu x fois le topic ([Func] Recherche de fichiers et de dossiers.), et pourtant, je viens juste de piger que je calculais mal l'emplacement du $iFlag! Et comme le $iFiltre "*.jpg" m'enduisait d'erreur... Bon, je sais, je n'ai pas d'excuses, mais j'essayais juste de faire pale figure!

@Tolf :Bien joué! C'est ce que je voulais signaler aussi, mais vu comment je me noie dans un verre d'eau, j'ai bien fait! :p J'ai même pens" à un moment, qu'il y avait un paramètre inclus dans la func de choix aléatoire pour éviter les remises.
A bientôt,
T@PµZ.
____________________________________
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Ex] Copie De Fichiers Aleatoires

#12

Message par timmalos »

Par contre, mon code est débile ;)

Code : Tout sélectionner

Global $ar_Array = _FileListToArrayEx ($adresse, "*.jpg", 1, "", TRUE)
Global $ar_Array2 = _FileListToArrayEx ($adresse, "*.bmp", 1, "", TRUE)
Global $ar_Array3 = _FileListToArrayEx ($adresse, "*.tif", 1, "", TRUE)

$nombre_images = $ar_Array[0] +  $ar_Arra2[0] +  $ar_Array3[0]
Peut etre remplacer par ca :

Code : Tout sélectionner

Global $ar_Array = _FileListToArrayEx ($adresse, "*.jpg;*.tif;*.bmp", 1, "", TRUE)

$nombre_images = $ar_Array[0]]
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11791
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Copie De Fichiers Aleatoires

#13

Message par Tlem »

Peut être à compléter avec _ArrayUnique. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre