c#, steamwriter 只写一行

c#, steamwriter only writes one line

我正在使用 streamReader 从多个文本文件中获取数据,然后使用 c# 中的 StreamWriter 将它们放在一个文本文件中,visual studio。每个文本文件有多行,每行包含用户输入的数据,因此行数会随时间变化。 streamwriter 正确地从 streamreader 中获取数据并将其放入文本文件中,但仅针对一行,然后它停止工作。这是为什么?

它还会计算另一个变量,但似乎无关,无论如何我都会包括它以防万一。

我的代码:

 using (StreamWriter sw = new StreamWriter("groups.txt"))
            {
                for (int l = 0; l < pupilDetailsID.Count; l++)
                { 
                    for (int i = 0; i < skiTimeID.Count - 1; i++)
                    {
                        for (int j = 0; j < quizID.Count; j++)
                        {

                            if (skiTimeID[i] == quizID[j] && quizID[j] == pupilDetailsID[l])
                            {
                                string fullPupilRecord = pupilDetailsID[l] + "~" + pupilDetailsFirstName[l] + "~" + pupilDetailsSurname[l] + "~" + pupilDetailsClass[l]
                                + "~" + pupilDetailsNumber[l] + "~" + skiTime1[i] + "~" + skiTime2[i] + "~" + skiTime3[i] + "~" + skiTime4[i] + "~" + skiTime5[i] + "~" + skiTime[i] + "~"
                                + quizScore[j] + "~" + quizPercentage[j];


                                int quizScoreNumber = Convert.ToInt32(quizScore[j]);
                                decimal skiTimeDecimal = Convert.ToDecimal(skiTime[i]);

                                if (quizScoreNumber >= 7 && skiTimeDecimal <= 40)
                                {
                                    groupLevel = "Advanced";
                                }

                                else if (quizScoreNumber >= 9 && skiTimeDecimal <= 50)
                                {
                                    groupLevel = "Advanced";
                                }

                                else if (quizScoreNumber >= 5 && skiTimeDecimal <= 30)
                                {
                                    groupLevel = "Advanced";
                                }

                                else if (quizScoreNumber >= 5 && skiTimeDecimal <= 50)
                                {
                                    groupLevel = "Intermediate";
                                }

                                else if (quizScoreNumber >= 7 && skiTimeDecimal <= 60)
                                {
                                    groupLevel = "Intermediate";
              
                                }

                                else if (quizScoreNumber >= 4 && skiTimeDecimal <= 40)
                                {
                                    groupLevel = "Intermediate";
                                }


                                else
                                {
                                    groupLevel = "Beginner";
                                }

                                fullPupilRecord = fullPupilRecord + "~" + groupLevel;
                                sw.WriteLine(fullPupilRecord);
                                fullPupilRecord = "";
                            }
                        }
                    }   
                }
                sw.Close();
            }

我不太了解我自己的代码,或者一般的 c#(不要问我为什么把自己置于必须编写代码的位置,我知道,我做出了一个愚蠢的决定,但现在为时已晚) 因此,如果答案是我可以复制并粘贴到我的代码中以修复它(如果可能的话),我们将不胜感激

于是我们通过讨论,解决方案是:

如果不想排除最后一行,需要修改判断条件。

for (int i = 0; i < skiTimeID.Count - 1; i++)修改为for (int i = 0; i < skiTimeID.Count; i++)