为了账号安全,请及时绑定邮箱和手机立即绑定

从 .txt 文件中删除所有行,以特定单词开头的行除外

从 .txt 文件中删除所有行,以特定单词开头的行除外

C#
慕少森 2023-05-14 16:48:49
我正在尝试创建一个程序,该程序将从文本文件中读取所有行并删除所有文本,但以“第 1 行:、第 2 行:、第 3 行:”等开头的行除外。UPDATE谢谢你的所有建议。这是最终的工作代码://PROCEDURE        private void Procedure()        {            // READ AND APPEND LINES            var file_path = @"Tags.txt";            var sb = new StringBuilder();            foreach (var line in File.ReadLines(file_path))            {                if (Regex.IsMatch(line, @"^Line\s+[0-9]+:") || (Regex.IsMatch(line, @"^Zeile\s+[0-9]+:") || (Regex.IsMatch(line, @"^Linea\s+[0-9]+:"))))                {                    sb.AppendLine(line);                }            }            // SAVE BACK            File.WriteAllText(file_path, sb.ToString());        }        private void btnRefine_Click(object sender, RoutedEventArgs e)        {            Procedure();        }欢迎对代码进行任何改进。
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

void ProcessFile()

{

    var file_path = @"Tags.txt";

    var sb = new StringBuilder();

    foreach (var line in File.ReadLines(file_path))

    {

        if (!Regex.IsMatch(line, @"^Line\s+[0-9]+:"))

        {

            sb.AppendLine(line);

        }

    }

    // Save back

    File.WriteAllText(file_path, sb.ToString());

}

更新

您可以改用 LINQ。那么之前的代码会是这样的:


void ProcessFile()

{

    var file_path = @"Tags.txt";

    File.WriteAllLines(file_path, File.ReadLines(file_path).Where(line => !Regex.IsMatch(line, @"^Line\s+[0-9]+:")));

}


查看完整回答
反对 回复 2023-05-14
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

我会利用File.ReadAllLines和File.WriteAllLines来执行文件 IO。它们很方便,因为它们允许您轻松地对文件的所有行使用 LINQ 样式的操作。这是以将整个文件读入内存为代价的——这对于大小为许多 GB 的文件可能不切实际。

LINQWhere子句允许您根据您选择的谓词过滤行。

保持一条线的标准是它以你的Line 123:模式开始。这可以使用像 . 这样的正则表达式来表达 ^Line\s+\d+:。这基本上要求该行Line以一些空格开头,然后是一些数字,然后是一个冒号。 Regex.IsMatch将允许您测试每一行是否与正则表达式匹配。

这是一个单行:

File.WriteAllLines("output.txt", File.ReadAllLines("input.txt")
    .Where(line => Regex.IsMatch(line, "^Line\s+\d+:")));


查看完整回答
反对 回复 2023-05-14
?
当年话下

TA贡献1890条经验 获得超9个赞

将所有行作为列表获取后,您可以简单地使用 RemoveAll 删除这样的行,


List<string> lines = new List<string> (File.ReadAllLines("Tags.txt"));

lines.RemoveAll(line => !Regex.IsMatch(line, @"^Line\s+\d+:");

using (StreamWriter fw = new StreamWriter(new FileStream("TagsNew.txt", FileMode.CreateNew, FileAccess.Write)))

{

   foreach (string line in lines)

   {

       fw.WriteLine(line);

   }

}

希望这可以帮助。


查看完整回答
反对 回复 2023-05-14
  • 3 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信