读取文本文件并将某些行分配给某些变量
本文关键字:分配 变量 取文本 读取 文件 | 更新日期: 2023-09-27 17:59:57
我正在开发一款Trivia C#控制台游戏,该游戏读取一个文本文件,该文件包含一个问题、多个选项、正确选项的编号和答案解释。共有四个问题集。任务是将文件中的每个问题提示到控制台窗口,让用户输入答案,然后将用户的答案与正确答案进行比较。文件中的所有四个问题都应该这样做。
创建了一个包含question、multipleAnswewrChoice、correctAnswer和answerExplaition的类,每个字段都有getter和setter。
我正在努力解决的问题是,在阅读文件后,如何将每个问题分配给某个变量,以便提示用户,并对四组进行提示。我制作了一个大小为4的数组(因为每个问题集有4行)来存储行,然后将每个元素分配给上面的每个变量,但我不知道如何循环来对所有四个集合执行相同的操作。
QuestionUnit是包含问题字段的类。
public void ReadQuestionFile( QuestionUnit unit)
{
string[] arrayReader = new string[4];
string line = "";
int i = 0;
string fileName = "TextFile1.txt";
StreamReader myReader = new StreamReader(fileName);
while ((line = myReader.ReadLine()) != null && i < 4 )
{
arrayReader[i] = line;
// Console.WriteLine(line);
//Console.WriteLine(arrayReader[i]);
i++;
}
unit.M_Question = arrayReader[0];
unit.M_Answers = arrayReader[1];
unit.M_CorrectAnswers = arrayReader[2];
unit.M_Explanation = arrayReader[3];
}
有什么办法吗?
因为所有数据都在同一个文件中,所以需要采取稍微不同的方法。我将使用返回阅读问题列表的功能,而不是传递要填写的项目:
public IEnumerable<QuestionUnit> ReadQuestionFile()
然后,循环读取,直到到达文件的末尾。这种方法对于无效输入是不安全的,所以要小心:
string fileName = "TextFile1.txt";
List<QuestionUnit> readQuestions = new List<QuestionUnit>();
using (StreamReader myReader = new StreamReader(fileName))
{
while (!myReader.EndOfStream)
{
QuestionUnit newQuestion = new QuestionUnit();
newQuestion.M_Question = myReader.ReadLine();
newQuestion.M_Answers = myReader.ReadLine();
newQuestion.M_CorrectAnswers = myReader.ReadLine();
newQuestion.M_Explanation = myReader.ReadLine();
readQuestions.Add(newQuestion);
}
}
return readQuestions;
基本上,你一直读到文件的末尾,一次读四行。如果输入格式不正确,您将得到一些null值。这里实际上不需要数组,因为您可以将值直接存储在对象中,然后在填充完后将其添加到列表中(从技术上讲,您以前也可以这样做)。然后你将填写好的列表返回给任何使用它的人。
您可以使用yield return
,而不是直接添加到列表中,但这是一个有点高级的入门概念,我不确定它与文件I/O的配合效果如何。无论哪种方式,意识到它的存在都是好的。唯一的变化将是删除readQuestions
,并且行:
yield return newQuestion;
当前对CCD_ 3的呼叫所在的位置。
如果我能澄清什么,请告诉我!