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

时间:2012-05-16 12:16:54

标签: c# .net text

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

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

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

由于

1 个答案:

答案 0 :(得分:3)

如果,您想要读取输入文件中的所有行,并将它们全部写入输出文件,但与给定文本匹配的行除外:

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

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

鉴于此输入文件:

This is the begin of the file
--
A line of text
--
Another line of text

它将产生此输出:

This is the begin of the file
A line of text
Another line of text

备注
在您的示例中,您在while循环中使用了此代码:

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

没有其他任何东西就足够了(但它会删除不需要的行,用空的代替它们)。它的问题(如果保持空行不是问题)是它将读取内存中的整个文件,如果文件非常大,它可能(非常)慢。 只是为了获取信息,这是你可以重写它来执行相同的任务(对于不太大的文件,因为它在内存中工作):

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