按行上的最后一个字符对文件中的行进行排序

时间:2011-01-25 19:25:32

标签: c# file file-io io

你能帮我解决这个问题: 我想在C#中构建一个方法,它将通过以下规则对大量文件进行排序 每行包含字符串,每行中的最后一个字符是int。 我想通过这个最后一个字符int来命令文件中的行。

由于

5 个答案:

答案 0 :(得分:4)

要按最后一个字符进行升序,可以解释为整数:

var orderedLines= File.ReadAllLines(@"test.txt")
                        .OrderBy(line => Convert.ToInt32(line[line.Length-1]))
                        .ToList();

修改

在评论中澄清 - 空格字符后面的整数,可以是多个数字:

var orderedLines= File.ReadAllLines(@"test.txt")
                      .OrderBy(line => Convert.ToInt32(line.Substring(line.LastIndexOf(" ")+1, 
                                                                        line.Length - line.LastIndexOf(" ")-1)))
                      .ToList();

答案 1 :(得分:2)

你可以这样做,其中filename是你文件的名称:

// Replace with the actual name of your file
string fileName = "MyFile.txt";

// Read the contents of the file into memory 
string[] lines = File.ReadAllLines(fileName);

// Sort the contents of the file based on the number after the last space in each line
var orderedLines = lines.OrderBy(x => Int32.Parse(x.Substring(x.LastIndexOf(' '))));

// Write the lines back to the file
File.WriteAllText(fileName, string.Join(Environment.NewLine, orderedLines));

这只是一个粗略的轮廓;希望它有用。

答案 2 :(得分:2)

File.WriteAllLines(
    pathToWriteTo,
    File.ReadLines(pathToReadFrom)
        .OrderBy(s => Convert.ToInt32(s.Split(' ').Last()))
);

如果文件很大,这可能无效,因为这种有效排序方法需要将整个文件读入内存。

答案 3 :(得分:0)

假设您需要多个单位数整数,并且您在文件名和其余部分之间有一个分隔符(我们称之为'splitChar'),它可以是任何字符:

from string str in File.ReadAllLines(fileName) 
    let split = str.Split(splitChar)
    orderby Int32.Parse(split[split.Count()-1]) 
    select str

将按照最后一个分组的整数值(由分割字符分隔)的顺序为您提供一系列字符串。

答案 4 :(得分:0)

也许这些链接中的一个可以通过自然方式对其进行排序来帮助您: