大家好,这就是我要做的事情。我有两个文本文件。嗯,让我们调用一个 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/