繁体   English   中英

C#排序文本文件,具有从高到低的分隔符

[英]C# sort text file that has separator from high to low

我正在尝试构建一个控制台应用程序,将指定文本文件中的日志从高到低排序。

日志示例:

Sheila Moore | 0001:05912 | BSIT | Number: 20
Jake Aloma | 0001:05913 | BSIT | Number: 21
Julius Cesar | 0001:05915 | BSIT | Number: 22

我想根据最后的“数字”将它们排序并从高到低拼写。

这是我迄今为止所做的代码,但它并没有达到我想要实现的目标。

string[] lists = File.ReadAllLines(file.txt);

foreach (string log in lists.OrderBy(x => x.Split('|').Last()))
{
   Console.WriteLine(log);
}

我想要达到的结果是:

Julius Cesar | 0001:05915 | BSIT | Number: 22
Jake Aloma | 0001:05913 | BSIT | Number: 21
Sheila Moore | 0001:05912 | BSIT | Number: 20

按降序排列。 我不知道OrderBy方法是否是这类任务的最佳方法。

任何帮助将非常感激:)谢谢!

//this will use MUCH less memory
var lines = File.ReadLines("file.txt");

foreach (string log in lines.OrderBy(x => Convert.ToInt32(x.Split('|').Last().Replace("Number: ", "").Trim()) * -1))
{
   Console.WriteLine(log);
}

你几乎就在那里......你需要从最后一列获得实际数字(并按数字和下降排序),所以这应该有效:

foreach (string log in lists.OrderByDescending(x => Convert.ToInt32(x.Split('|').Last().Split(new [] { ": " }, StringSplitOptions.RemoveEmptyEntries)[1])))
{
  Console.WriteLine(log);
}

如果您计划在枚举期间打开文件,那么您还应该使用File.ReadLines而不是File.ReadAllLines (因此它不必一次读取整个文件)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM