好吧,现在我遇到了一个新问题。 我在C#中编写代码
每次我将字符串输入文本框并单击“保存”按钮时,我想从textBoxName保存到group.txt文件中。它应该按此顺序保存(如果它可以像A-Z一样排序那么好):
1. Petar Milutinovic
2. Ljiljana Milutinovic
3. Stefan Milutinovic
4. ... etc
我无法让它工作,我尝试使用我的第一个问题中的tehniques,但还没有解决方案:(
我猜这很容易,但我仍然是一个初学者,我需要这个......#/ p>
答案 0 :(得分:1)
尝试从自上而下的方法解决这个问题。写出应该发生的事情,因为你的问题并不明显。
示例:
注意:每行都以行号为前缀,格式为“X. Sample”,其中X是行号,Sample是文本框中的文本。
上述准确吗?
(如果您只想在文本文件中添加一行,请参阅 http://msdn.microsoft.com/en-us/library/ms143356.aspx - File.AppendAllText(filename, myTextBox.Text + Environment.NewLine);
可能是你想要的)
答案 1 :(得分:1)
这是一个简单的小例程,可用于读取,排序和编写文件。有很多方法可以做到,我的可能甚至不是最好的。即使是现在,我正在考虑“我本可以使用FileStream
编写并完成迭代计算然后”,但它们是微优化,如果你有以后可以做到的多兆字节文件的性能问题。
public static void AddUserToGroup(string userName)
{
// Read the users from the file
List<string> users = File.ReadAllLines("group.txt").ToList();
// Strip out the index number
users = users.Select(u => u.Substring(u.IndexOf(". ") + 2)).ToList();
users.Add(userName); // Add the new user
users.Sort((x,y) => x.CompareTo(y)); // Sort
// Reallocate the number
for (int i = 0; i < users.Count; i++)
{
users[i] = (i + 1).ToString() + ". " + users[i];
}
// Write to the file again
File.WriteAllLines("group.txt", users);
}
答案 2 :(得分:0)
如果您需要在每次添加新行时对文件进行排序,您必须将文件加载到列表中,添加行,并对其进行排序,或使用某种搜索(我是推荐二进制搜索)以确定新行所属的位置并相应地插入。然而,第二种方法没有很多优点,因为你基本上必须重写整个文件才能插入一行 - 它只能节省你在最佳情况下的时间,这种情况发生在要插入的行落在文件的结尾。此外,第二种方法在处理器上稍微轻一些,因为您没有尝试对每一行进行排序 - 但对于小文件,差异将是不明显的。