我发生的事情是我有两个文件。两个文件都以“|”分隔。如果文件1与文件2中的一行匹配,我需要组合这些行。这是代码:
string[] mathlines = File.ReadAllLines(@"C:\math.txt");
var addlines = File.ReadAllLines(@"K:\add.txt");
foreach (string ml in mathlines)
{
string[] parse = ml.Split('|');
if (addlines.Contains(parse[0]))
{
File.AppendAllText(@"C:\final.txt", parse[0]+"|"+parse[1]+"\n");
}
else
{
File.AppendAllText(@"C:\final.txt", ml + "\n");
}
}
我意识到数学部分尚未设置,但我需要让匹配部分正常工作。
以下是一个例子:
mathlines:
dart|504.91
GI|1782.06
Gcel|194.52
clay|437.35
grado|217.77
greGCR|14.82
rp|372.54
rp2|11.92
gsg|349.92
GSxil|4520.55
addlines:
Gimet|13768994304
GSxil|394735896576
Ho|4994967296
gen|485331304448
GSctal|23482733690
Obr|88899345920
正如您所看到的,mathlines包含GSxil,addlines也是如此,但我的if (addlines.Contains)
从不对addlines中的变量进行罚款。任何帮助总是被爱!感谢。
抱歉忘了提到我需要它才能完全匹配比较。此外,我需要在匹配的正确行上拆分变量。所以我需要拆分394735896576这个例子,然后追加394735896576。
答案 0 :(得分:2)
addLines.Contains(parse[0])
将匹配整个字符串;你需要根据部分匹配。有更高效的解决方案,但O(n ^ 2)选项是使用LINQ Any()
:
if (addLines.Any(l => l.StartsWith(parse[0])))
{
...
答案 1 :(得分:0)
您可以将addlines.txt中的所有行加载到字典中,然后使用它来查找mathlines.txt中每行的匹配项。这种方法比你目前的方法快得多。
string[] mathlines = File.ReadAllLines(@"C:\math.txt");
string[] addlines = File.ReadAllLines(@"K:\addlines.txt");
string[] finallines = new string[mathlines.Length];
var addlinesLookup = new Dictionary<string, string>();
for (int i = 0; i < addlines.Length; i++)
{
string[] parts = addlines[i].Split('|');
if (parts.Length == 2) // Will there ever be more than 2 parts?
{
addlinesLookup.Add(parts[0], parts[1]);
}
}
for (int i = 0; i < mathlines.Length; i++)
{
string[] parts = mathlines[i].Split('|');
if (parts.Length >= 1)
{
if (addlinesLookup.ContainsKey(parts[0]))
{
finallines[i] = mathlines[i] + "|" + addlinesLookup[parts[0]] + "\n";
}
{
finallines[i] = mathlines[i] + "\n";
}
}
}
File.AppendAllLines(@"C:\final.txt", finallines, Encoding.ASCII);