【问题标题】:c# Compare 2 text files and delete few linesc#比较2个文本文件并删除几行
【发布时间】:2018-12-18 02:53:17
【问题描述】:

我需要比较包含多行的 2 个文本文件。 第一个文件由 63 行组成,第二个由 10 行组成。所以,我需要比较它们并删除如果第一个包含第二个,也就是说,如果第二个文件中的这 10 行包含到第一个文件中,删除它们从第一个文件开始。

        string line = null;
        string[] lines = File.ReadAllLines(@"D:\trash.txt").ToArray();
        using (StreamReader file = new StreamReader(@"D:\write.txt"))
        {
            while ((line = file.ReadLine()) != null)
            {
                for (int i = 0; i < lines.Length; i++)
                {
                    if (!line.Contains(lines[i]))
                    {
                        using (StreamWriter writer = new StreamWriter(@"D:\numbers.txt", true))
                        {
                            writer.WriteLine(line);
                        }
                    }
                }
            }
        }

我试图像这样比较它们,而不是将相同的行写入新文件。但是如你所见,这段代码,如果 !line.Contains(lines[i]) 为真,写一行 10 次,导致lines.Length 等于 10

【问题讨论】:

  • 你有没有尝试过?你卡在哪里了?
  • 你在这个任务中遇到了什么问题?
  • @Sinatr 我试图将它们放入数组中,但失败了
  • @Tudor 我不知道该怎么做
  • @AlexandruPupsa 非常感谢!它有效!

标签: c# .net string stream


【解决方案1】:

简单的方法:

对于文件 1 中的每一行 x:
对于文件 2 中的每一行 y:
比较行 x 和 y,如果匹配,则从文件 1 中删除行 x

如果要测试的行数(文件 2)足够小或有足够的可用内存,则更好的方法:

将文件 2 中的所有行加载到哈希表中
对于文件 1 中的每一行 x:
检查哈希表是否包含 x,如果是,则从文件 1 中删除行 x

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多