static void Main()
{
FileStream fs = new FileStream("Scheduler.txt",FileMode.Open, FileAccess.Read);
StreamReader filereader = new StreamReader(fs);
string linevalue = "";
ArrayList items = new ArrayList();
while ((linevalue = filereader.ReadLine()) != null)
{
items.Add(linevalue);
}
filereader.Close();
items.Sort();
IEnumerator myEnumerator = items.GetEnumerator();
while (myEnumerator.MoveNext())
{
Console.WriteLine(myEnumerator.Current);
}
}
我的程序需要解决问题。这个程序,我实际上是从一个聪明的人得到它,但我无法追溯。我不知道出了什么问题。我希望通过数组列表存储和显示存储在我的文本文件中的所有内容。任何帮助将不胜感激。
它显示但不正确。 我的文本文件有以下详细信息
Names Date Time
Leon 13/10/2013 10:00AM
Jyothika 18/10/2013 12:18PM
Angelina 21/09/2000 01:45AM
它不是以相同的方式显示,而是显示为
Angelina 21/09/2000 01:45AM
Names Dates Time
Leon 13/10/2013 10:00AM
Jyothika 18/10/2013 12:18PM
答案 0 :(得分:3)
问题是您在添加到项目之前再次阅读linevalue
:
您可以更轻松地完成这项工作:
var lines = File.ReadAllLines("Scheduler.txt").ToList();
lines.Sort();
foreach(var line in lines) Console.WriteLine( line );
答案 1 :(得分:0)
试试这个:
while ((linevalue = filereader.ReadLine()) != null)
{
//linevalue = filereader.ReadLine();
items.Add(linevalue);
}
更简单的方法:
// store your items
ArrayList items =
new ArrayList(File.ReadAllLines("Scheduler.txt").ToArray());
// output them, eventually
items.ToArray().ToList().ForEach(item =>
{
Console.WriteLine(item);
});
答案 2 :(得分:0)
static void Main()
{
FileStream fs = new FileStream("Scheduler.txt",FileMode.Open, FileAccess.Read);
StreamReader filereader = new StreamReader(fs);
string linevalue = "";
ArrayList items = new ArrayList();
while ((linevalue = filereader.ReadLine()) != null)
{
//linevalue = filereader.ReadLine();
items.Add(linevalue);
}
filereader.Close();
items.Sort();
IEnumerator myEnumerator = items.GetEnumerator();
while (myEnumerator.MoveNext())
{
Console.WriteLine(myEnumerator.Current);
}
}
答案 3 :(得分:0)
问题是标题行是一行,因此它与其他行一起排序。有多种方法可以解决这个问题...在另一个变量中单独读取标题行而不添加到ArrayList
,在排序前从ArrayList
删除第一行,只排序后的行首先......我选择了最后一个并编写了一些变体来说明如何编写代码。
第一级,不排序第一行,并使用using
关键字,而不是手动关闭文件。
ArrayList items = new ArrayList();
using (FileStream fs = new FileStream("Scheduler.txt", FileMode.Open, FileAccess.Read))
using (StreamReader filereader = new StreamReader(fs))
{
string linevalue = string.Empty;
while ((linevalue = filereader.ReadLine()) != null)
{
items.Add(linevalue);
}
}
Console.WriteLine(items[0]);
items.Sort(1, items.Count - 1, StringComparer.CurrentCulture);
IEnumerator myEnumerator = items.GetEnumerator();
myEnumerator.MoveNext(); // skip the first row
while (myEnumerator.MoveNext())
{
Console.WriteLine(myEnumerator.Current);
}
第二级,请忘记ArrayList
......这是一个有文化前世界的孩子......我希望有一天我们能够忘记这个世界。并手动使用GetEnumerator
?有foreach
(或for
,这些东西是ArrayList
/ List<string>
的集合。for
更好,因为我们必须跳过第一行。
var items = new List<string>();
using (FileStream fs = new FileStream("Scheduler.txt", FileMode.Open, FileAccess.Read))
using (StreamReader filereader = new StreamReader(fs))
{
string linevalue = string.Empty;
while ((linevalue = filereader.ReadLine()) != null)
{
items.Add(linevalue);
}
}
Console.WriteLine(items[0]);
items.Sort(1, items.Count - 1, StringComparer.CurrentCulture);
for (int i = 1; i < items.Count; i++)
{
Console.WriteLine(items[i]);
}
然后我们可以删除FileStream
,因为StreamReader
有一个足够好的构造函数...
using (StreamReader filereader = new StreamReader("Scheduler.txt"))
或者我们可以直接使用返回File.ReadAllLines
数组的string[]
。
string[] items = File.ReadAllLines("Scheduler.txt");
Console.WriteLine(items[0]);
Array.Sort(items, 1, items.Length - 1, StringComparer.CurrentCulture);
for (int i = 1; i < items.Length; i++)
{
Console.WriteLine(items[i]);
}
或者,而不是for
,我们可以使用一点LINQ:
foreach (string item in items.Skip(1))
{
Console.WriteLine(item);
}
并使用Skip
方法跳过第一行(这些LINQ行与所有不使用ArrayList
的版本兼容)