gpt4 book ai didi

linq - 使用 LINQ 进行日志处理

转载 作者:行者123 更新时间:2023-12-01 00:25:35 25 4
gpt4 key购买 nike

我知道它可能不是性能最好的,但我想用 LINQ 语句处理一些日志。这是日志的样子:

RECORD  DEVON   1   6748
bla bla bla bla bla bla
bla bla bla bla bla bla
RECORD JASON 1 7436
bla bla bla bla bla bla
bla bla bla bla bla bla
RECORD DEVON 2 9123
RECORD DEVON 3 3723
RECORD SHERRIE 1 6434
RECORD DEVON 4 3732
bla bla bla bla bla bla
bla bla bla bla bla bla
bla bla bla bla bla bla
RECORD SHERRIE 2 6434
bla bla bla bla bla bla
bla bla bla bla bla bla
bla bla bla bla bla bla
bla bla bla bla bla bla
RECORD SHERRIE 3 9123
RECORD DEVON 5 3723
bla bla bla bla bla bla
RECORD JASON 2 9123
RECORD DEVON 6 3723
bla bla bla bla bla bla
bla bla bla bla bla bla
RECORD JASON 3 9123

现在我想过滤掉任何不以 RECORD 开头的内容,并按名称列(JASON、DEVON、SHERRIE)对其进行分组,然后按名称交叉连接,如下所示:
DEVON   JASON   SHERRIE
1/6748 1/7436 1/6434
2/9123 2/9123 2/6434
3/3723 3/9123 3/9123
4/3732
5/3723
6/3723

这可以在单个 LINQ 语句中完成吗?

最佳答案

您可以使用 Linq 一次性获得行中的结果(这里我使用的是方法符号):

string[] lines = File.ReadAllLines("input.txt");
var result =
lines.Where(line => line.Substring(0, 6) == "RECORD")
.Select(line => line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries))
.GroupBy(columns => columns[1],
columns => columns[2] + "/" + columns[3])
.Select(group => group.Key + " " + string.Join(", ", group.ToArray()));

输出:
DEVON 1/6748, 2/9123, 3/3723, 4/3732, 5/3723, 6/3723
JASON 1/7436, 2/9123, 3/9123
SHERRIE 1/6434, 2/6434, 3/9123

我认为如果没有标准的 Zip 函数,很难将行转换为列。也许这对你来说已经足够了?如果没有,那么您可能需要使用一个辅助方法来完成最后一点,该方法会遍历单独的 IEnumerables。

关于linq - 使用 LINQ 进行日志处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2097549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com