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++)
。
我正在使用 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++)
。