在C#中删除文本文件中包含另一个文件文本的所有行。

问题描述 投票:0回答:1

我也想和你一样 这条 然而在C#中。

换句话说,我有3个文本文件。

  • content.txt
  • remove.txt
  • result.txt

我想删除所有的行 content.txt 中的任何一行。remove.txt 并将结果输出到 result.txt.

c# console-application
1个回答
5
投票

你可以试试 线路:写给 result.txt 全行 content.txt 其中线不在 remove.txt:

 using System.IO;
 using System.Linq;

 ...

 HashSet<string> toRemove = new HashSet<string>(File.ReadLines(@"remove.txt"));

 File.WriteAllLines(@"result.txt", File
   .ReadLines(@"content.txt")
   .Where(line => !toRemove.Contains(line)));

2
投票

首先阅读文件

var contentLines = File.ReadAllLines("content.txt");
var removeLines = File.ReadAllLines("remove.txt");

然后,我们可以利用Linq查询创建ResultLines,在Linq查询中,我们遍历contentLines,并检查内容行是否在remove lines集合中不存在。

var resultLines = contentLines.Where(contentLine => removeLines.All(r => r != contentLine)).ToList();

最后把resultLines写到一个新的文件里,叫result.txt。

 File.WriteAllLines("result.txt", resultLines);

完整样本

using System.IO;
using System.Linq;

namespace Sandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            // ReadFiles
            var contentLines = File.ReadAllLines("content.txt");
            var removeLines = File.ReadAllLines("remove.txt");

            // Iterate through content lines and check that it doesn't exists in removeLines by using LINQ
            var resultLines = contentLines.Where(contentLine => removeLines.All(r => r != contentLine)).ToList();

            // Write result.txt
            File.WriteAllLines("result.txt", resultLines);
        }
    }
}

0
投票

这里是一个开始

string[]  allLinesRemove = File.ReadAllLines(filePath_of_Remove.txt);
string[]  allLinesContent = File.ReadAllLines(filePath_of_Content.txt);

现在使用LINQ或For Loops来获取你需要的东西到第3个数组。我把它留给了你

然后输出结果

© www.soinside.com 2019 - 2024. All rights reserved.