我目前正在编写一个代码,我将学生添加到学生的文本文件中并进行其他计算。我遇到的问题是我必须将新学生排序到文本文件中,以便他在正确的位置。
StreamWriter changeFile = new StreamWriter("Students.txt", true);
if (pos > 0)
{
changeFile.Close();
}
else
{
changeFile.WriteLine(newStudent);
changeFile.Close();
}
using (StreamReader streamReader = new StreamReader("Students.txt"))
{
string text = streamReader.ReadToEnd();
}
到目前为止,我已设法将文本文件更改为字符串以比较2,但它位于错误的位置。我将使用什么代码使StreamWriter将newStudent字符串与文本文件进行比较,以便它能以正确的顺序放置它? 附:该文本文件中有10,000多名学生。
这些是文本文件的前5行:
students (LIST
(LIST (LIST 'Abbott 'A_____ 'J ) 'NONE 'xxxxx@mail.usi.edu 2.3073320999676614 )
(LIST (LIST 'Abbott 'B_____ 'Y ) 'NONE 'xxxxx@mail.usi.edu 3.1915725161177115 )
(LIST (LIST 'Abbott 'R_____ 'Y ) 'NONE 'xxxxx@mail.usi.edu 3.448215586562192 )
(LIST (LIST 'Abel 'H_____ 'Y ) 'NONE 'xxxxx@mail.usi.edu 3.2517764202656974 )
) ) <- this is at the end
答案 0 :(得分:2)
简单的方法是:
可替换地:
或者,对于大文件更好:
答案 1 :(得分:0)
假设文本文件每行包含一个学生,您可以将文本文件读入字符串列表,然后添加新学生,然后对其进行排序并将其写回文件。
var allStudents = new List<string>(File.ReadAllLines("Students.txt"));
allStudents.Add(newStudent);
allStudents.Sort(allStudents);
File.WriteLines("Students.txt", allStudents);
这是低效的,因为每次读取和写入整个文件。如果您有选择,请考虑使用其他人建议的数据库。
编辑:
由于您的文件的第一行不是学生,因此您应该在排序之前删除它并稍后重新添加。
您可以删除该行:
var line = allStudents[0];
allStudents.RemoveAt(0);
然后重新添加:
allStudents.Insert(0, line);
答案 2 :(得分:0)
类似
var Students = File.ReadAllText("Students.txt").Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).ToList().Union(new string[] { newStudent }).ToList().Sort();
File.WriteAllLines("Students.txt", Students);
可能适合你