如果数据已经在文本文件中,如何不在其中包含

时间:2016-05-13 12:13:47

标签: c#

我想基于特定输出将数据添加到文本文件中,它将读取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); ;
                }

            }
        }
    }
}

问题是,即使数据在其他地方完全相同,它仍然会写入该行。我不想要重复的行

有什么建议吗?

澄清更新

" CertainData"是参考编号

我有一堆文件中包含数据,我要分离并放入文本文件的文件是#34; CertainData"字段,将具有参考编号

有时我收到的文件将在其中包含与#34; CertainData"相同的格式化信息。出现在他们的参考

当我运行这个程序时,如果文本文件我已经包含" CertainData"里面的参考号,我不想写它

如果您需要进一步澄清,请通知我,我将更新帖子

2 个答案:

答案 0 :(得分:4)

我认为你想要这样:读取所有行,过滤掉包含关键字的行并将其写入新文件。

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

如果您还想删除重复的行,可以添加如下不同的行:

filteredLines = filteredLines.Distinct();

答案 1 :(得分:2)

为什么在Distinct循环之前没有使用for。这将在写入文件之前过滤您的行。

尝试这样的事情

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

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