2016-05-13 95 views
0

我想根據特定輸出將數據添加到文本文件中,它將讀取XML文件並將特定行寫入文本文件。如果數據已經寫入文本文件,我不想再寫一遍。如何在文本文件中不包含數據(如果已經存在)

代碼:

public void output(string folder) 
{ 
    string S = "Data" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xml"; 
    //Trades.Save(S); 
    string path = Path.Combine(folder, S); 
    Console.WriteLine(path); 
    XDocument f = new XDocument(Trades); 

    f.Save(path); 

    string[] lines = File.ReadAllLines(path); 
    File.WriteAllLines(path, lines); 

    using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"H:\Test" + DateTime.Now.ToString("yyMMdd") + ".txt", true)) 
    { 
     foreach (string line in lines) 
     { 
      if (line.Contains("CertainData")) 
      { 
       file.WriteLine(line); 
       if (File.ReadAllLines(path).Any(x => x.Equals(line))) 
       { 
       } 
       else 
       { 
        string[] tradeRefLines = File.ReadAllLines(path); 
        File.WriteAllLines(path, tradeRefLines); ; 
       } 

      } 
     } 
    } 
} 

問題是,它仍然會寫行,即使數據是完全一樣的其他地方。我不想複製線

有什麼建議嗎?

澄清UPDATE

的「CertainData」是一個參考號碼

我有一大堆的文件,這些文件中有數據和一塊我想單獨和放入文本文件「 CertainData」領域,這將有一個參考號碼

有時候我發將裏面的相同的格式化信息與文件‘在他們的CertainData’出現供參考

當我運行這個程序時,如果文本文件中已經包含「CertainData」參考編號,我不希望它被寫入

如果您需要任何更多的澄清讓我知道,我會更新帖子

+0

你的意思是你不想寫重複的行到一個文件? – kkaosninja

+0

如果你必須檢查它是否存在*在所有文檔中*而不是在每行中,那麼使用ReadAllText,它將只返回一個字符串,然後Contains會給你你期待的結果 – Gusman

+0

@kkaosninja是的,對不起,如果我沒有足夠清楚 – Nonagon

回答

2

爲什麼在for循環之前不使用Distinct。這會在寫入文件之前過濾你的行。

嘗試這樣的事情

string[] lines = new string[] { "a", "b", "c", "a" }; 

string[] filterLines = lines.Distinct().ToArray<string>(); 
4

我想你想要這樣的:讀取所有行,過濾掉那些含有關鍵字,並將其寫入到一個新文件。

var lines = File.ReadAllLines(path).ToList(); 
var filteredLines = lines.Where(!line.Contains("CertainData")); 
File.WriteAllLines(path, filteredLines); 

如果您也想刪除重複的線路,你可以添加不同的是這樣的:

filteredLines = filteredLines.Distinct(); 
+0

很好的答案!不幸的是,在「CertainData」區域中添加的數據將使用唯一標識符。 – Nonagon

+0

你是什麼意思與唯一標識符?你能解釋一下這個問題嗎? – Carra

+0

更新爲公證,謝謝 – Nonagon

相關問題