Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据内容对文件内容进行排序_C#_Linq - Fatal编程技术网

C# 根据内容对文件内容进行排序

C# 根据内容对文件内容进行排序,c#,linq,C#,Linq,我有一个特别具有某些特征的文件,但是,在这个文件的第30列中,我有一个数字,不是连续的,5位数字,我想根据这个数字,按升序排列这个文件的行 例如: sample sample sample1 00094 sample sample sample2 00001 sample sample sample3 00032 sample sample sample4 00491 sample sample sample5 00002 s

我有一个特别具有某些特征的文件,但是,在这个文件的第30列中,我有一个数字,不是连续的,5位数字,我想根据这个数字,按升序排列这个文件的行

例如:

sample sample sample1        00094
sample sample sample2        00001
sample sample sample3        00032
sample sample sample4        00491
sample sample sample5        00002
sample sample sample6        00010
sample sample sample7        00007
序列号是0009400001

输出为:

sample sample sample2        00001
sample sample sample5        00002
sample sample sample7        00007
sample sample sample6        00010
sample sample sample3        00032
sample sample sample1        00094
sample sample sample4        00491
我开发了一个sitema超级猪,在那里我播放列表中的所有内容,并进行冒泡排序,然后,我想知道是否有更有效的方法来实现这一点,也许是使用Linq,或者甚至是其他方法

谢谢你的帮助

string[] lines = File.ReadAllLines(@"C:\temp\yourFile.txt");

var sotedLines = lines.Skip(1)
                      .Take(lines.Length - 2)
                      .OrderBy(getKeyFromLine)
                      .ToArray();

sortedLines.ForEach(Console.WriteLine);
现在,如果列之间用空格分隔,请使用next
getKeyFromLine
实现:

Func<string, int> getKeyFromLine = line => int.Parse(line.Split(' ')[30]);
那么:

string[] lines = File.ReadAllLines(@"text.txt");
var result = lines.AsParallel()
    .OrderBy(s => s.Split(' ').Last())
    .ToList();

在第30列中
这些列是如何分开的?按帐单?按空格?那只是在第30列,我可以在前30列中有一个名字,可以使用所有前30列…列之间的分隔符是什么?你是怎么得到第30栏的?角色。。。数字,字母,空格。。。任何东西,数字都会在第30到35列中。分隔列的不是空格。By
OP表示字符在一行中的位置。他需要30-35个字符。我花了一些时间才弄明白(见注释),但数字仍然是每行的最后一个非空格字符?我不知道。可能的情况是,他们不在队伍的尽头。此外,您需要按字母数字顺序排列,但不能按字母顺序排列,因此您可能还需要使用
int.Parse
可以不处理文件的第一行和最后一行?如果这是一个大文件,您不想将其读入内存,您可以尝试类似
file.ReadLines(@“C:\temp\yourFile.txt”)的方法.Skip(1).Reverse().Skip(1).Reverse().OrderBy(getKeyFromLine)
以将内容保持在可枚举状态。在实际尝试提取数据之前,将推迟对Reverse的评估。不过,结合文件,您可能是对的。大多数测试都是需要的。它是延迟的,但不是流式的。当您阅读第一个项目时,您将阅读所有项目和
File.ReadLines
在这种情况下会有所帮助。
string[] lines = File.ReadAllLines(@"text.txt");
var result = lines.AsParallel()
    .OrderBy(s => s.Split(' ').Last())
    .ToList();