2017-09-14 133 views
1

我有一个程序检查特定字段的两个文本文件,然后检查两个文件是否具有指定的字段。如果是的话那么匹配的数量存储到另一个目录。我遇到的问题是,它只是写第一个匹配的文本文件,当我知道我有两场比赛。我是相当新的C#所以任何帮助/建议将不胜感激,下面的代码是做检查。将列表<string>的内容写入文本文件

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; 
     } 
    } 
} 

感谢,
瑞安

+1

参见:[System.IO.File.WriteAllLines](https://msdn.microsoft.com/library/dd383463。 aspx) – Corak

回答

2

WriteAllTextoverwrite现有的文件 - 所以只有一个单一的入口会出现被写入。

您会想要appendwrite all

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); 
} 
+0

谢谢,已修复它,我知道它需要重构和更清洁,但现在它运作,所以我很高兴:) – RyanK

+0

@RyanK一定要upvote Tim的答案(他的帖子左侧的向上箭头) 。 – mjwills

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 -list关联的。

然而,这会写所有的文本文件,并替换您的循环:

var matchingItems = lstStore103.Intersect(lstStore101); 
File.WriteAllLines(@"H:\Compare.txt", matchingItems); 
+0

感谢Tim的回应真的很有帮助,我已经接受mjwillis作为答案,因为现在这可以满足我的需求,但是当我重新构造代码时,我一定会使用你的,重新获得帮助。 – RyanK