嘿大家,这就是我发生的事情.我有两个文本文件.嗯我们可以调用一个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)
我知道它不会找到第一个"如果",因为它读取整行并且无法找到它.但我仍然相信我的输出文件不会包含我需要的内容.
假设你使用的是.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)
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