2017-09-14 108 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

相關問題