如果该行与其他行不匹配,则仅将数据写入文本文件

时间:2016-05-16 09:59:38

标签: 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是参考编号。

我有一堆文件,其中包含数据,我想要分隔并放入文本文件的文件是CertainData字段,该字段将包含参考编号。

有时我收到的文件中会有相同的格式化信息,其中出现CertainData以供参考。

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

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

2 个答案:

答案 0 :(得分:0)

已编辑:

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

    bool isExist = false;
    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"))
            {
                isExist = true;
            }
        }
        if (!isExist)
        {
            File.AppendAllText(path, "CertainData" + Environment.NewLine);
        }
    }
}

答案 1 :(得分:0)

尝试使用此LINQ:

var previousLines = new HashSet<string>();
File.WriteAllLines(destPath, File.ReadLines(sourcePath)
                              .Where(line => previousLines.Add(line)));