C#组合线

1 c# text-processing

嘿大家,这就是我发生的事情.我有两个文本文件.嗯我们可以调用一个A.txt和B.txt.

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

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

我需要的是,如果B,包含A.取B中包含A的所有行并将其写为A | B | B | B ect ....

例如:

A.txt:
Apple
Orange
Pear XBSj
HEROE

B.txt:
Apple | 3123123
Apple | 3434
Orange | 99999999
Orange | 1234544
Pear | 11
Pear | 12
XBSJ | 43949
XBSJ | 43933

Result.txt:
Apple | 3123123 | 3434
Orange | 99999999 | 1234544
Pear | 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]);
                }
            }
Run Code Online (Sandbox Code Playgroud)

我知道它不会找到第一个"如果",因为它读取整行并且无法找到它.但我仍然相信我的输出文件不会包含我需要的内容.

Jon*_*eet 5

假设你使用的是.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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


dtb*_*dtb 5

var a = new HashSet<string>(File.ReadAllLines(@"a.txt")
                                .SelectMany(line => line.Split(' ')),
                            StringComparer.CurrentCultureIgnoreCase);

var c = File.ReadAllLines(@"b.txt")
            .Select(line => line.Split('|'))
            .GroupBy(item => item[0], item => item[1])
            .Where(group => a.Contains(group.Key))
            .Select(group => group.Key + "|" + string.Join("|", group.ToArray()))
            .ToArray();

File.WriteAllLines("result.txt", c);
Run Code Online (Sandbox Code Playgroud)

输出:

Apple|3123123|3434
Orange|99999999|1234544
Pear|11|12
XBSJ|43949|43933