比较字符串到文本文件

时间:2013-11-07 19:06:56

标签: c# string string-comparison

我目前正在编写一个代码,我将学生添加到学生的文本文件中并进行其他计算。我遇到的问题是我必须将新学生排序到文本文件中,以便他在正确的位置。

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

3 个答案:

答案 0 :(得分:2)

简单的方法是:

  1. 在换行符处拆分字符串
  2. 创建包含源代码行的列表
  3. 将新学生添加到列表
  4. 对列表进行排序
  5. 将列表写入文件
  6. 可替换地:

    1. 在换行符处拆分字符串
    2. 创建包含源代码行的列表
    3. 将行回写到文件util,找到新记录的位置
    4. 撰写新记录
    5. 写下其余的记录。
    6. 或者,对于大文件更好:

      1. 逐行阅读源文件
      2. 将行写入临时目标文件
      3. 当您找到插入新记录的正确位置时,请将其写入dest文件。
      4. 继续从源到目的地复制行
      5. 删除源文件并重命名目标文件以取代它。

答案 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);

可能适合你