我有一个程序检查特定字段的两个文本文件,然后检查是否有任何文件具有指定的字段。如果是,那么匹配的数量将存储到另一个列表中。我遇到的问题是它只写了第一个匹配文本文件,当我知道我有两个匹配。我是C#的新手,所以任何帮助/建议都会受到赞赏,下面的代码正在检查。
while ((lineBeingRead = fileToRead.ReadLine()) != null)
{
if (lineBeingRead.IndexOf(" :22:", 0) == 0)
{
lstTwentyOneCounter.Add(lineBeingRead.Substring(11));
lstStoreTwentyOne = lstTwentyOneCounter;
}
}
以下代码是写入文本文件。
foreach (var single103 in lstStore103)
{
foreach (var single101 in lstStore101)
{
if (single101 == single103)
{
checkResults.Add(single103);
System.IO.File.WriteAllText(@"H:\Compare.txt", single103);
break;
}
}
}
谢谢,
莱恩
答案 0 :(得分:2)
break;
负责,它将离开循环。
但是您也不想使用WriteAllText
来重写整个文本文件,但是您想要添加一个新行。我会用这种方法:
string startPattern = " :22:";
List<string> lstStoreTwentyOne = File.ReadLines(path)
.Where(l => l.StartsWith(startPattern))
.Select(l => l.Substring(startPattern.Length))
.ToList();
这将创建并填充列表。我不知道这与lstStore103
- 列表有什么关系。
但是,这会将所有内容写入文本文件并替换您的循环:
var matchingItems = lstStore103.Intersect(lstStore101);
File.WriteAllLines(@"H:\Compare.txt", matchingItems);
答案 1 :(得分:2)
WriteAllText
将overwrite现有文件 - 因此只会显示一个条目。
System.IO.File.Delete(@"H:\Compare.txt");
foreach (var single103 in lstStore103)
{
foreach (var single101 in lstStore101)
{
if (single101 == single103)
{
checkResults.Add(single103);
System.IO.File.AppendAllText(@"H:\Compare.txt", single103 + Environment.NewLine);
}
}
}
或(如果lstStore103
和lstStore101
都没有重复):
System.IO.File.Delete(@"H:\Compare.txt");
foreach (var value in lstStore103.Intersect(lstStore101))
{
checkResults.Add(value);
System.IO.File.AppendAllText(@"H:\Compare.txt", value + Environment.NewLine);
}