3

这是我的代码:

StreamReader reader = new StreamReader("war.txt");
string input = null;

while ((input = reader.ReadLine()) != null)
{
    Console.WriteLine(input);
}

reader.Close();

上面的程序从文件“war.txt”中逐行读取并打印出来。我需要重新编写程序,以便它以相反的顺序打印出来,即最后一行在前,第一行在后。例如,如果“war.txt”包含以下内容:

Hello.

How are you?

Thank you.

Goodbye.

该程序应打印出:

Goodbye.

Thank you.

How are you?

Hello.

我是 C# 的新手,请帮忙!谢谢!

4

8 回答 8

3

为此,无论如何您都必须缓冲数据(除非您使用FileStreamAPI 进行一些棘手的工作以向后读取文件)。怎么样:

var lines = File.ReadAllLines("war.txt");
for(int i = lines.Length - 1; i >= 0; i--)
    Console.WriteLine(lines[i]);

它只是将文件(按行)加载到数组中,然后从末尾开始打印数组。

一个 LINQ 版本将是:

foreach(var line in File.ReadLines("war.txt").Reverse())
    Console.WriteLine(line);

但坦率地说,数组版本更有效。

于 2012-08-13T06:53:00.927 回答
0

您可以使用递归来做到这一点,如下所示:

void printReverse(int n)
{
   String line = reader.readLine();

   if (n > 0)
     printReverse(n-1);

   System.out.println(line);
}
于 2012-08-13T06:53:42.160 回答
0

尝试

File.ReadAllLines(myFile)
    .Reverse();

完整代码

var list =  File.ReadAllLines(filepath).Reverse().ToList();
           foreach (var l in list)
               Console.WriteLine(l);

实施细节

Enumerable.Reverse 方法- 反转序列中元素的顺序

File.ReadAllLines Method (String) - 打开一个文本文件,读取文件的所有行,然后关闭文件。

于 2012-08-13T06:54:40.223 回答
0

看看将行添加到List,然后在列表上使用Reverse,然后可能是ForEach来输出项目。

于 2012-08-13T06:54:42.897 回答
0

另一种选择:Stack在阅读时将每一行存储到 a 中。读取文件后,弹出堆栈以逆序打印行。

于 2012-08-13T06:55:00.660 回答
0

使用可枚举的扩展函数,这可以做得更短:

foreach(var l in File.ReadAllLines("war.txt").Reverse())
    Console.WriteLine(l);
于 2012-08-13T06:56:25.533 回答
0

这是一个示例伙伴,记得添加“使用 System.IO”

尝试

        {
            const int Size = 7;
            decimal[] numbers = new decimal[Size];
            decimal total = 0m;

            int index = 0;

            StreamReader inputfile;

            inputfile = File.OpenText("Sales.txt");

            while (index < numbers.Length && !inputfile.EndOfStream)
            {
                numbers[index] = decimal.Parse(inputfile.ReadLine());
                index++;
            }

            inputfile.Close();

            foreach (decimal Sales in numbers)
            {
                outputlistBox1.Items.Add(Sales);
                total = total + Sales;
            }

            textBox1.Text = total.ToString();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
于 2014-06-05T04:41:30.907 回答
0

这是我几年前买的一本教科书的另一个例子,它有最高/最低/平均分数..(记得使用'using System IO;)

私人双平均(int [] iArray)

    {
        int total = 0;
        double Average;

        for (int index = 0; index < iArray.Length;
            index++)
       {
            total += iArray[index];
       }

        Average = (double) total / iArray.Length;

        return Average;
    }

    private int Highest(int[] iArray)
    {
        int highest = iArray[0];

        for (int index = 1; index < iArray.Length; index++)
        {
            if (iArray[index] > highest)
            {
                highest = iArray[index];
            }
        }

        return highest;
    }

    private int Lowest(int[] iArray)
    {
        int lowest = iArray[0];

        for (int index = 1; index < iArray.Length; index++)
        {
            if (iArray[index] < lowest)
            {
                lowest = iArray[index];
            }
        }

        return lowest;
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
        try
        {
            const int SIZE = 5;
            int[] Scores = new int [SIZE];
            int index = 0;
            int highestScore;
            int lowestScore;
            double averageScore;
            StreamReader inputFile;

            inputFile = File.OpenText("C:\\Users\\Asus\\Desktop\\TestScores.txt");

            while (!inputFile.EndOfStream && index < Scores.Length)
            {
                Scores[index] = int.Parse(inputFile.ReadLine());
                index++;
            }

            inputFile.Close();

            foreach (int value in Scores)
            {
                listBox1.Items.Add(value);
            }

            highestScore = Highest(Scores);
            lowestScore = Lowest(Scores);
            averageScore = Average(Scores);

            textBox1.Text = highestScore.ToString();
            textBox2.Text = lowestScore.ToString();
            textBox3.Text = averageScore.ToString("n1");

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    private void button2_Click(object sender, EventArgs e)
    {
        this.Close();
    }      
}

}

于 2014-06-05T15:29:03.050 回答