IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

tirage aléatoire d'un dossier sans remise et récupération d'un fichier son


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    physicien
    Inscrit en
    Mai 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : physicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut tirage aléatoire d'un dossier sans remise et récupération d'un fichier son
    Bonjour,
    Je suis débutant en C# et j’apprend un Sur le tas c'est pour ça que je me tourne vers vous pour tenter de régler mon problème que je n'arrive pas à résoudre
    je voudrais que , dans un dossier sélectionné, je puis sélectionné au hasard un sous dossier mais, pour toute la suite de l'exécution du programme , les sous dossiers qui ont été sélectionnés ne ressortent jamais.

    je me dit qu'il serai surement pratique de donné un numéro a chaque sous-dossier et ensuite de tirer un numéro au hasard. si le numéro est dans la liste des "déjà sortit" alors on relance. ou tout simplement on supprime les numéros sorti de la liste de ceux qui peuvent être tiré aléatoirement. mais je ne vois pas comment réaliser cela en C#

    Chacun de mes sous dossiers contiennent un fichier son (mais qui ont tous un nom différent).
    J’aimerais ensuite récupérer le chemin du fichier son dans le sous-dossier qui a été choisie au hasard

    Merci

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Je te propose de convertir ton string[] retourné par GetDirectories() en List<string> puis utilise cette méthode "PickRandom()" :
    Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    using System;
    using System.Collections.Generic;
     
    namespace PickRandom
    {
        class Program
        {
            static void Main()
            {
                Console.WriteLine("Hello World!");
     
                List<string> lst = new List<string>() { "Item A", "Item B", "Item C", "Item D" };
     
                string s = string.Empty;
                while (s != null)
                {
                    s = lst.PickRandom();
                    Console.WriteLine(s);
                }
            }
        }
     
        static class MyExtensions
        {
            public static T PickRandom<T>(this List<T> list)
            {
                if (list.Count > 0)
                {
                    int idx = (new Random()).Next(list.Count);
                    T res = list[idx];
                    list.RemoveAt(idx);
                    return res;
                }
                else
                {
                    return default;
                }
            }
        }
    }

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    physicien
    Inscrit en
    Mai 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : physicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut nouveau probleme avec GetDirectories()
    J'ai désormais un autre problème. En fait je suis en train de créer un script pour sony vegas 14 (qui est un script dll). Comme à chaque fois que j’essayais mon code je devais lancer sony vegas 14. J'ai créé une application console pour pouvoir tester mon code et voir ce que certaines fonctions retournais au fur et à mesure de la création de mon programme. Quand j'ai enfin réussi à créer toutes les fonctions dont j'avais besoin dans l'application console j'ai voulu les récupérer dans mon script qui est une class Library. Malheureusement à ce moment la fonction GetDirectories().ne fonctionne plus j'ai passé un petit moment pour le trouver. A chaque fois que je l'utiliser elle me retourne une liste vide
    est-ce que quelqu’un a déjà eu ce problème ? Ou est-ce que quelqu’un a une solution à me proposer ?
    Merci pour tout

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Deux causes possibles :
    - Problème de droits : l'identité sous laquelle tourne ton programme n'a pas accès aux répertoires en question, donc elle ne les voit pas. C'est assez peu probable vu le contexte.
    - Problème de chemin d'exécution : sans paramètre, GetDirectories() retourne les sous-dossiers du chemin d'exécution. Si tu doubles-cliques sur une icône sur le bureau, il va par exemple rechercher les sous-dossiers de c:\windows\system32 (il me semble). Si tu lances depuis une fenêtre console en tapant "<chemin d'accès>\mon.exe" alors il va rechercher les dossiers dans le répertoire où se trouve la console, pas celui dans lequel se situe le programme (c:\users\tonuser par défaut)

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    physicien
    Inscrit en
    Mai 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : physicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Dans mon cas le chemin du dossier est directement inscrit dans le programme et il ne varie pas (je voulais m'occuper de le faire varier plus tard avec un winForm). Ce qui est bizarre c'est que j'arrive à récupérer les sous-dossiers quand je exécute mon programme version console (toujours avec le chemin qui ne varie pas et qui est inscrit dans le programme ) mais quand je passe sur le programme genérer par la class library Là je n'arrive pas à récupérer le chemin de mes sous-dossiers .
    j'ai justement pensé que c'était un problème de chemins .c'est pour ça que j'ai essayez de déplacer le dossier principal dans lequel je trouve les sous dossiers que mon programme doit indexer .je l'ai mis une fois dans le même dossier que sony vegas et une foi ou le fichier dll ce trouve. Et pour ces 2 essais j'ai à chaque fois essayé de mettre comme chemin le chemin complet et le chemin relatif au dossier ou ce trouvait respectivement sony vegas et mon programme
    Auriez-vous une idée de comment recréer une nouvelle fonction qui permettrait de récupérer tous les sous-dossiers d'un dossier

    En tout cas merci de continuer à me répondre pour essayer de trouver une solution à mon problème

  6. #6
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Sans plus de détail sur votre code, difficile à dire...

    En tout cas, le fait que le code soit inclut dans une DLL ne devrait pas avoir le moindre impact sur son fonctionnement.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    physicien
    Inscrit en
    Mai 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : physicien
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    oui pardon. je ne sais pas si mon code est très claire(j ai la mauvaise habitude de ne pas trop commenter et de faire des essaie et ensuite de les mettre en commentaire pour essayé différente choses )
    si quel que chose n'est pas claire dites moi je me donnerais de la penne pour rendre mon code plus compréhensible


    voici le code de la méthode qui pose problème. je vous met la méthode en entier et pas juste la partie critique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    public static List<string> Creationdelistededossierrandom(string monDossiers, int monnobredextrait)
    {
        MessageBox.Show("le-chemin-choisi-est: " + monDossiers);
        //int monnobredextrait = 5;
        //string monDossiers = @"D:\Claymore\Vtest\MONBLINDTEST3OST";
     
     
        //string[] dirs = Directory.GetDirectories(@"c:\", "p*", SearchOption.TopDirectoryOnly);
     
        //string[] dirs = Directory.GetDirectories(@"c:\", "", SearchOption.TopDirectoryOnly);//get la lieste des dossier dans le dossier demander
        List<string> listtest = new List<string>(Directory.EnumerateDirectories(@"D:\", "*.*", SearchOption.TopDirectoryOnly));
        string[] dirs = Directory.GetDirectories(monDossiers, "", SearchOption.TopDirectoryOnly);
     
        MessageBox.Show("le -nombre-delement-dans-le-array-est " + listtest.Count);
     
        List<string> listdedossier = new List<string>(dirs); // convert le array dans une list
        if (listdedossier.Count < monnobredextrait)
        {
     
     
            MessageBox.Show("le nombres de fichier est inferieur au nombre d'extrait demande");
            //System.Environment.Exit(0);
        };
     
        /*
        int nbdossiers = listdedossier.Count;
        for (int i = 0; i < nbdossiers; i = i + 1)
        {
            Console.WriteLine(listdedossier[i]);
        }
        */
        // ... Create new Random object.
     
     
     
        //list de nbrandom
        List<int> malistrandom = new List<int>(ListNBaleatoireGENERATOR(monnobredextrait, listdedossier.Count));//ListNBaleatoireGENERATOR crrer une liste de nombre aleatoire
     
     
     
     
        //creation de la liste des dossier choisis
        List<string> lesdossierschoisis = new List<string>();
     
        for (int i = 0; i < malistrandom.Count; i = i + 1)
        {
            lesdossierschoisis.Add(listdedossier[malistrandom[i]]);
        }
     
        return lesdossierschoisis;
    }

Discussions similaires

  1. Tirage aléatoire sans remise
    Par Mohammed_Z dans le forum R
    Réponses: 2
    Dernier message: 02/08/2015, 12h39
  2. Tirage aléatoire sans remise
    Par Ghadgoud dans le forum Débuter
    Réponses: 4
    Dernier message: 02/06/2015, 12h47
  3. [Sources/Macros] Tirage aléatoire sans remise : macro tasr
    Par fafabzh6 dans le forum Contribuez
    Réponses: 2
    Dernier message: 10/04/2014, 20h43
  4. Boucle tirage aléatoire sans remise
    Par Jennn dans le forum Macro
    Réponses: 17
    Dernier message: 12/07/2012, 09h17
  5. Perl script aléatoire d'un hash: tirage sans remise
    Par Sethenssen dans le forum Langage
    Réponses: 11
    Dernier message: 04/08/2011, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo