Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007
-
14 avril 2005 à 21:45
rsamourai
Messages postés5Date d'inscriptiondimanche 19 décembre 2004StatutMembreDernière intervention20 juillet 2005
-
20 juil. 2005 à 21:13
Bonsoir
Je crée actuellement un jeu ludoeducatif et j'aimerai stocker dans un fichier les questions et les reponses. Mais voilà la synthaxe des fichiers je comprend pas tout et j'aimerai savoir quelles sont les modifications a apporter avec Microsoft Visual c#.net :
Par exemple, je travaille en mode conseil et quand j'ouvre un projet j'ai ce code :
using System;
namespace ConsoleApplication6
{
/// <summary>
/// Description résumée de Class1.
/// </summary>
class Class1
{
/// <summary>
/// Point d'entrée principal de l'application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
}
}
D'après ce que j'ai compris de mes cours, le using.System devient using.system.IO et si on utilise des caractères accentués il faut ajouter using.system.text. Ensuite donc pour créer mon fichier je fais :
FileStream fich = new FileStream ("questionnaire.txt", FileMode.Append (dans un premier temps je veux seulement ecrire dans le fichier, je précise qu'il n'existe pa , FileAccess.Read)
StreamWriter quest = new StreamWriter (fich)
Ensuite je suis complètement perdue : j'aimerai qu'il me propose a chaque fois d'ecrire une question et une reponse donc il me faut deux champs different car mon premier champ est un string et le deuxieme un char.
J'aimerai qu'il me propose d'ecriture une question et une reponse jusqu'a ce que je lui dise non mais je n'arrive même a lui dire d'ecriture une question et un réponse.
Si quelqu'un pouvait m'aider ce serait gentil.
Maiku
Messages postés190Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention 4 juillet 2007 15 avril 2005 à 15:42
Au plus on avance, au plus les fusibles de mon cerveau petent les uns apres les autres.
Bon je vé essayer un truc concret.
Donc dans mon contexte, il s'agit d'un questionnaire.
J'ai deux programmes :
- l'un complete mon fichier (Ca c'est ok)
- le deuxieme genere une question : l'enfant y repond, le programme regarde la reponse du fichier par rapport a cette question et il dit c'est vrai ou faux.
Si l'on part du deuxieme programme, je dois lui dire ça si j'ai bien compris :
FileStream fich = new FileStream("questionnaire.txt",FileMode.Open,FileAccess.Read,FileShare.Read)
StreamReader quest = new StreamReader (fich)
"Donc la j'ai un sommaire avec un selon dont je te passe les détails, l'enfant fait son choix :
"Generer une question du fichier aléatoirement et donc decomposer la ligne de l'enregistrement en deux champs que je met dans des strings d'apres tes explications : le generer une question je sé pa encore le faire faut que je cherche
"L'enfant repond : la aussi je te passe les détails
"Le programme compare la saisie et la réponse inscrite dans un string.
Ce serait a peu pres ca le code si je me trompe pas ?
Mais cette commande ne marche pas je pense dans ce contexte :
string coupleQR = "question;reponse";
string[] QR = coupleQR.Splilt(';');
Vu qu'il doit comment dire séparer les deux champs a partir du fichier donc il ne connait pas d'avance la question.
C'est quand il connaître l'enregistrement généré qu'il devra séparer .
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 15 avril 2005 à 15:51
Oui, tu as le bon cheminement la.
Pour ce qui est de mon petite exemple avec le split, il est evident que
ce sera a faire une fois que tu auras la questions, c'est a dire a
cette etape ci
"Generer une question du fichier
aléatoirement et donc decomposer la ligne de l'enregistrement en deux
champs que je met dans des strings d'apres tes explications : le
generer une question je sé pa encore le faire faut que je cherche"
Une fois que tu auras choisi aléatoirement la ligne de la question,
cette ligne sera le string sur lequel tu effectura le Split()
sebseb42
Messages postés495Date d'inscriptiondimanche 6 juillet 2003StatutMembreDernière intervention 9 novembre 20071 16 avril 2005 à 13:37
petits complement, Morpion a si bien repondu quil me reste plus grand chose a dire :p
sinon juste deux trucs, pour t'eviter de tapper 300 truc pour ouvrire un fichier en mode Append, tu peux faire ceci :
StreamWriter streamWriter = new StreamWriter ("questionnaire.txt", true);
// le true indiaue Append = true :)
aussi ce que je te conseil, c'est qu'au chargement de ton programme, tu charge toute ta liste dans un ArrayList (c'est en gros une liste chainer tres facile a utiliser et tres pratique) comme ca, tu pourra acceder a ce que tu veux, quand tu veux, de facon tres efficace.
je te donne un exemple pour utiliser le ArrayList
... // dans ta fonction
ArrayList listQR = new ArrayList();
string line;
StreamReader sr = new StreamReader("questionnaire.txt"); // chargement du fichier
while ((line = sr.ReadLine()) != null) // on lit des lignes tant qu'on a pas atteint la fin, qui est indiquer par un renvoie de null par ReadLine()
{
string tab[] = line.Split(";"); // comme l'as dit MorpionMx, on decoupe la chaine pour avoir un tableau de strings
listQR.Add(tab); // la liste (ArrayList) prend des object, donc en gros elle prend n'importe quoi :) et un string[] est aussi un object alors c'est bon ;)
}
Voila, ton fichier est charger dans ton ArrayList, ensuite pour le parcourir, c'est aussi simple :
foreach (string[] QR in listQR) // ici le foreach auto-cast les object de la liste dans le type demander en premier lieu (ici string[])
{
// apres, en gros:
// poser la question :
Console.WriteLine(Q[0]);
// prendre la reponse
Console.WriteLine("donnez la reponse :");
string reponse = Console.ReadLine();
// analyse de la reponse :
if (rep.ToLower() == QR[1].ToLower()) // pour pallier au probleme de casse
{
// reponse ok
}
else
{
// reponse pas ok :)
}
}
Ceci fait un defilement de toutes les questions dans l'ordre, car le foreach parcour tout les elements, mais si tu en veut un en random, au lieu de faire un foreach sur la listQR, tu fait just ceci :
string[] QR = listQR[rnd_num] // rnd_num = valeur aleatoire comprise entre 0 et listQR.Count - 1
rsamourai
Messages postés5Date d'inscriptiondimanche 19 décembre 2004StatutMembreDernière intervention20 juillet 2005 20 juil. 2005 à 16:45
g une petite question :
si je créé mon fichier comme MorpionMx la dit plus haut
: " StreamWriter streamWriter = new StreamWriter
("fichier1.txt"); "
j'ai une erreur qui ce produit IOExpetion qui me dit que le fichier est
utiliser par un autre processus. si je quitte le programme et que je le
relance y a pas de probleme puisqu'il a créé le programme. Comment je
peut faire en sorte que, dés la création du fichier je puisse
l'utiliser.