C# 合并行

标签 c# text-processing

大家好,这就是我要做的事情。我有两个文本文件。嗯,让我们调用一个 A.txt 和 B.txt。

A.txt 是一个包含一堆文件夹名称的配置文件,每个文件夹只有一个列表。

B.txt 是包含文件夹名称和大小的目录列表。但是 B 包含一堆列表,而不仅仅是一个条目。

我需要的是如果 B 包含 A。将 B 中包含 A 的所有行写成 A|B|B|B ect....

例如:

A.txt:
苹果
橙色
梨 XBSj
英雄

B.txt:
苹果|3123123
苹果|3434
橙色|99999999
橙色|1234544
梨|11
梨|12
XBSJ|43949
XBSJ|43933

结果.txt:
苹果|3123123|3434
橙色|99999999|1234544
梨|11|12
XBSJ|43949|43933

这就是我所拥有的,但它并没有真正满足我的需要。

string[] combineconfig = File.ReadAllLines(@"C:\a.txt");
        foreach (string ccline in combineconfig)
        {
            string[] readlines = File.ReadAllLines(@"C:\b.txt");
            if (readlines.Contains(ccline))
            {
                foreach (string rdlines in readlines)
                {
                    string[] pslines = rdlines.Split('|');
                    File.AppendAllText(@"C:\result.txt", ccline + '|' + pslines[0]);
                }
            }

我知道它不会找到第一个“if”,因为它会读取整行但找不到它。但我仍然相信我的输出文件不会包含我需要的内容。

最佳答案

假设您使用的是 .NET 3.5(因此可以使用 LINQ),试试这个:

string[] configLines = File.ReadAllLines("a.txt");
var dataLines = from line in File.ReadAllLines("b.txt")
                let split = line.Split('|')
                select new { Key = split[0], Value = split[1] };
var lookup = dataLines.ToLookup(x => x.Key, x => x.Value);

using (TextWriter writer = File.CreateText("result.txt"))
{
    foreach (string key in configLines)
    {
        string[] values = lookup[key].ToArray();
        if (values.Length > 0)
        {
            writer.WriteLine("{0}|{1}", key, string.Join("|", values));
        }
    }
}

关于C# 合并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593168/

相关文章:

c# - 在 C# 后端检查正则表达式验证器的验证

python - 以 4 为一组从巨大的文本文件中读取行

python - 元组列表中元组的第一个元素小写

python - 使用 torchtext 和文本序列作为输入

linux - 在 linux 命令行中替换大文件第一行中字符串的最快方法?

c# - 捕获/抛出堆栈跟踪丢失错误行号

c# - 如何在 C++ 和 C# 之间共享一个大字节数组

c# - 我可以将 Razor 代码减少到几行吗?

c# - 如何检查字符数组中是否存在特定字符

python - 使用 Python 进行日志分析(访问的热门 URL)