如何使此代码工作

时间:2013-08-07 10:34:03

标签: c#

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

4 个答案:

答案 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的版本兼容)