按某些标准从每行对数据文件行进行排序
本文关键字:数据 排序 文件 标准 | 更新日期: 2023-09-27 18:16:36
我有一个像这样以制表符分隔的文件:
Name ID LastName ZipCode Age Address SomeOtherColumn AnotherColumn
Yo 122 YoYo 123 56 Main St 3847387 efhhsvhfv
Joe 145 Klose 444 34 Main St 45787 8u8u78
Yo 122 YoYo 456 56 5th Ave ttytty4AA 4rt8r78t
Mary 862 Mary 478 22 Roe Ave r876aa234 trfrtrt
我想用Name + ID + LastName
的组合对这个文件的行进行排序,例如,所有"Yo"家伙的行现在将在一起,而不是分散在整个文件中,等等…
它有很多行,大约120,000行。我在寻找一些关于如何做到这一点的想法和算法?
var query = File.ReadLines(filename)
.Skip(1) //column names
.Select(line => new { line = line, parts = line.Split(''t') })
.OrderBy(x => x.parts[0]) //name
.ThenBy(x => x.parts[2]) //lastname
.ThenBy(x => x.parts[1]) //id
.Select(x => x.line);
File.WriteAllLines(newfilename, query);
您可以使用LINQ,例如:
var lines = File.ReadLines("path")
.Skip(1) // header
.Select(Line => new { Line, Fields = Line.Split(''t') })
.Where(x => x.Fields.Length == 8)
.Select(x => new
{
x.Line,
x.Fields,
Name = x.Fields[0],
ID = x.Fields[1],
LastName = x.Fields[2],
ZipCode = x.Fields[3],
Age = x.Fields[4],
Address = x.Fields[5],
SomeOtherColumn = x.Fields[6],
AnotherColumn = x.Fields[7]
})
.OrderBy(x => x.Name)
.ThenBy(x => x.ID)
.ThenBy(x => x.LastName)
.Select(x => x.Line);
注意事项:
- 你应该使用一个可用的CSV解析器来解析CSV -file
- 你应该使用一个具有这些属性的真实类,而不是匿名类型
- 然后使用
List<ThisType>
而不是字符串来进一步处理