如何从文本文件中删除不需要的行

本文关键字:删除 不需要 文件 文本 | 更新日期: 2023-09-27 18:34:16

我的项目正在写入两个文本文件。 一个用于输入,一个用于输出。我需要它们在最后写入两个相同的文本文件。

这是我到目前为止的代码:

static void Main( string[] args )
    {
        string line = null;
        string line_to_delete = "--";
        string desktopLocation = Environment.GetFolderPath( Environment.SpecialFolder.Desktop );
        string text = Path.Combine( desktopLocation, "tim3.txt" );
        string file = Path.Combine( desktopLocation, "tim4.txt" );
        using (StreamReader reader = new StreamReader( text ))
        {
            using (StreamWriter writer = new StreamWriter( file ))
            {
                while (( line = reader.ReadLine() ) != null)
                {
                    if (string.Compare( line, line_to_delete ) == 0)
                        File.WriteAllText( file, File.ReadAllText( text ).Replace( line_to_delete, "" ) );
                    continue;
                }
            }

谢谢

如何从文本文件中删除不需要的行

如果要

从输入文件中读取所有行并将它们全部写入输出文件(与给定文本匹配的行除外(:

public static void StripUnwantedLines(
    string inputFilePath,
    string outputFilePath,
    string lineToRemove)
{
    using (StreamReader reader = new StreamReader(inputFilePath))
    using (StreamWriter writer = new StreamWriter(outputFilePath))
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            bool isUnwanted = String.Equals(line, lineToRemove,
                StringComparison.CurrentCultureIgnoreCase);
            if (!isUnwanted)
                writer.WriteLine(line);
        }
    }
}

在这种情况下,比较是使用当前区域性进行的(如果您需要搜索"--",这可能并不重要,但可以明确指定(,并且不区分大小写。
如果您希望跳过以给定文本开头的所有行,则可能需要使用 line.StartsWith 更改String.Equals

给定此输入文件:

这是文件的开头--一行文本--另一行文本

它将产生以下输出:

这是文件的开头一行文本另一行文本

笔记
在您的示例中,您在 while 循环中使用了以下代码:

File.WriteAllText(file, 
    File.ReadAllText(text).Replace(line_to_delete, ""));

没有其他任何东西可能就足够了(但它会删除不需要的行,用空的行替换它们(。它的问题(如果保留空行不是问题(是它会读取内存中的整个文件,如果文件真的很大,它可能会(非常(慢。仅供参考,这是您可以重写它以执行相同任务的方式(对于不太大的文件,因为它可以在内存中工作(:

File.WriteAllText(outputFilePath, File.ReadAllText(inputFilePath).
    Where(x => !String.Equals(x, lineToDelete));