我想基于特定输出将数据添加到文本文件中,它将读取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"里面的参考号,我不想写它
如果您需要进一步澄清,请通知我,我将更新帖子
答案 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>();