C# 使用arraylist或array的StreamReader
这是我的密码:C# 使用arraylist或array的StreamReader,c#,arrays,arraylist,streamreader,C#,Arrays,Arraylist,Streamreader,这是我的密码: StreamReader reader = new StreamReader("war.txt"); string input = null; while ((input = reader.ReadLine()) != null) { Console.WriteLine(input); } reader.Close(); 上面的程序逐行读取并打印文件“war.txt”。我需要重新编写程序,以便它以相反的顺序打印,即最后一行在前,第一行在后。例如,如果“war.txt
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#的新手,请帮帮我!谢谢 要做到这一点,您必须对数据进行缓冲(除非您使用
FileStream
API进行一些复杂的工作以向后读取文件)。那就:
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);
但是坦率地说,数组版本更有效。您可以使用递归来实现它,如下所示:
void printReverse(int n)
{
String line = reader.readLine();
if (n > 0)
printReverse(n-1);
System.out.println(line);
}
试一试
完整代码
var list = File.ReadAllLines(filepath).Reverse().ToList();
foreach (var l in list)
Console.WriteLine(l);
实施细节
-反转序列中元素的顺序
-打开一个文本文件,读取该文件的所有行,然后关闭该文件。查看将行添加到,然后在列表上使用,然后可能使用输出项。另一个选项:在读取时将每行存储到
堆栈中。读取文件后,弹出堆栈以按相反顺序打印行。使用可枚举扩展函数,可以缩短打印时间:
foreach(var l in File.ReadAllLines("war.txt").Reverse())
Console.WriteLine(l);
下面是一个示例,请记住添加“using System.IO”
试一试
{
常数int Size=7;
十进制[]数字=新的十进制[大小];
小数总数=0米;
int指数=0;
StreamReader输入文件;
inputfile=File.OpenText(“Sales.txt”);
while(索引
这是我几年前买的一本教科书的另一个例子,它有最高/最低/平均分数…(记住使用“使用系统IO;”)
私人双倍平均(int[]iArray)
{
int-total=0;
双倍平均;
对于(int index=0;index最高)
{
最高=指数;
}
}
回报最高;
}
私有整数最低值(整数[]iArray)
{
int lower=iArray[0];
对于(int index=1;index
}对于任何不重要的文件,这可能会破坏堆栈。为什么要在空间上拆分?@MarcGravel-我想我已经删除了它,没有必要了(注意:file.ReadLines
is.NET 4.0及以上)顺便说一句StreamReader
是IDisposable
;你应该使用它,也就是说使用(var reader=newstreamreader(“war.txt”){…}
这对我来说很像家庭作业:)
foreach(var l in File.ReadAllLines("war.txt").Reverse())
Console.WriteLine(l);
{
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);
}
{
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();
}
}