Bonjour à tous !
Je me permet de vous solliciter car je bloque sur une fonction que je n'arrive pas à faire fonctionner comme je le souhaite. Il est possible que la conception même de la fonction ne convienne pas à ce que je souhaite faire.
Cette fonction intervient dans le cadre d'un programme de jeu de Quizz que je dev en ce moment pour m'entraîner. Je signal que j'ai commencé le dev y a 2 mois et demi, donc soyez indulgents
La voici, avec le commentaire qui va bien pour vous aider à vous comprendre ce que je souhaite faire, et ensuite je vous explique ce qui pose problème :
J'ai donc 2 fichiers dans le dossier, donc 2 thèmes, "Jeux Vidéo" et "Manga", sous forme "chaîne de caractères", à stocker dans mon tableau, tout simplement.
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 public static Theme[] ReadFromDirectory(string directoryPath) { //Comptage des fichiers dans le dossier, pour préparer la dimension du tableau var filesCount = (from file in Directory.EnumerateFiles(directoryPath, "*.txt", SearchOption.AllDirectories) select file).Count(); //Variable qui servira de nombre de "cases" que contiendra le tableau. La taille du tableau. Elle est égale au nombre de fichiers. int i = filesCount; //Le tableau de type class "Theme". Theme[] themes = new Theme[i]; //Récupérations des fichiers var files = Directory.EnumerateFiles(directoryPath, "*.txt"); int numbering = 0;//Variable qui permettera de numéroter les thèmes du quizz par ordre croissant. foreach (var file in files) { //Pour chaque fichier, lecture des lignes contenues dans le fichier. var lines = File.ReadAllLines(file); foreach (var line in lines) { if (line.Contains("thème"))//Pour chaque ligne, séléctionner celles contenant le mot "thème". { int found = line.IndexOf(": ");//Pour chaque ligne contenant le mot "thème", on extrait le nom du thème à cet indice. Theme theme = new Theme(numbering++, line.Substring(found + 2));//Instanciation de la classe lié au theme. for (i = 0; i < themes.Length; i++) { themes[i] = theme;//Pour chaque thème extrait, on le stock dans une case du tableau } Console.WriteLine($"{numbering}: {line}");//On verifie, visuellement, que le tout marche bien } } } return themes;//On renvoi les 2 thèmes. }
Sauf que mon soucis, c'est que je me retrouve au final, avec 2 fois le thème "Manga" dans les 2 slots du tableaux, au lieu de "Jeux Vidéo" d'abord, puis "Manga" (dans l'ordre de lecture des fichiers).
Avec le débogage, j'ai compris ce qu'il se passe. En fait, quand ma fonction boucle, elle boucle d'abord sur le premier fichier, donc elle stock deux fois le premier thème "Jeux Vidéo" dans le tableau, puis boucle sur le second fichier, écrase le premier thème pour stocker à la place le thème "Manga" dans les deux slots.
J'ai donc à la fin deux fois "Manga", au lieux des deux thèmes. Et je n'arrive pas à trouver la solution.
J'ai beau tenter de sortir les boucles, supprimer l'une des boucles, mettre un "break", bref j'ai tâtonné à mort mais là je rend les armes, j'en peux plus xD
Je sais pas si j'ai été clair, mais je reste à votre disposition si besoin, et merci par avance de votre aide !
Partager