【问题标题】:Remove blank lines in a text file删除文本文件中的空行
【发布时间】:2011-09-22 17:31:44
【问题描述】:

如何在 C# 中从文本文件中删除空行?

【问题讨论】:

  • @Dee Jay:-1 表示 -1 拼写错误,这就是编辑的目的。
  • @Tieson T. Geez,我能说得更具体点吗,只需从文本文件中删除空白行,它有几行,其中一些是空白的,所以有字符串
  • 迈克,您的问题历史表明有人试图仅使用社区帮助编写一个简单的应用程序。那是自私的,而不是真正的编程。拿起一本书,学习一些教程——从长远来看,你会过得更好。
  • @Hans Passant - 这绝对不是您所指问题的重复。这个问如何去除空行,你指的那个问如何去除重复行。
  • @Hans Passant - 这些问题的答案是不同的。重复行的问题有点复杂,解决方案会更消耗内存。两个问题都已经有了答案,你可以看到答案不一样,不能互换。

标签: c# .net string string-parsing


【解决方案1】:

我们可以很容易地通过使用 LINQ 技术来处理大文件或小文件。 1.说明:它会读取文件并跳过所有空行并将所有数据存储到一个字符串数组中

                    string[] text = File.ReadAllLines(path with file name).Where(s => s.Trim() != string.Empty).ToArray();
  1. 它将删除该文件。

                    File.Delete(path with file name);
    
  2. 它将创建同名的新文件并将所有数组数据附加到新文件中

                    File.WriteAllLines(path with file name, text);
    

完整代码

                string[] text = File.ReadAllLines(LoraWan_Parameter_Check_Tool.Properties.Settings.Default.csv_file_path.ToString()).Where(s => s.Trim() != string.Empty).ToArray();
                File.Delete(LoraWan_Parameter_Check_Tool.Properties.Settings.Default.csv_file_path.ToString());
                File.WriteAllLines(LoraWan_Parameter_Check_Tool.Properties.Settings.Default.csv_file_path.ToString(), text);
  1. 问题已解决

谢谢

【讨论】:

    【解决方案2】:

    将文件的所有内容读入字符串然后运行

    string output = null;
    try {
        output = Regex.Replace(input, @"^\s*$", "", RegexOptions.Multiline);
    } catch (Exception e) {
    
    }
    

    其他类似的选项可以在How to remove empty lines from a formatted string?找到

    【讨论】:

      【解决方案3】:

      如果文件很小:

      var lines = File.ReadAllLines(fileName).Where(arg => !string.IsNullOrWhiteSpace(arg));
      File.WriteAllLines(fileName, lines);
      

      如果文件很大:

      var tempFileName = Path.GetTempFileName();
      try
      {
          using (var streamReader = new StreamReader(inptuFileName))
          using (var streamWriter = new StreamWriter(tempFileName))
          {
              string line;
              while ((line = streamReader.ReadLine()) != null)
              {
                  if (!string.IsNullOrWhiteSpace(line))
                      streamWriter.WriteLine(line);
              }
          }
          File.Copy(tempFileName, inptuFileName, true);
      }
      finally
      {
          File.Delete(tempFileName);
      }
      

      【讨论】:

      • 对于大文件来说不是一个好的解决方案,因为整个文件可能只有 1 行,然后你仍然使用 ReadLine() 在内存中读取它...
      • 有趣的是,在搜索这个主题时,我发现这篇博客文章支持这个答案:chrisfulstow.com/… 它基本上显示了指示对于非常大的文件使用streamReader 的指标,否则只需使用ReadAllLines方法。
      • 没用..cannot implicitly convert type void to string.
      【解决方案4】:
      File.WriteAllLines(path, File.ReadAllLines(path).Where(l => !string.IsNullOrWhiteSpace(l)));
      

      【讨论】:

        猜你喜欢
        • 2014-04-18
        • 1970-01-01
        • 1970-01-01
        • 2021-02-18
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多