You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何删除m3u文本文件中的多余空行 现有处理代码不生效求排查

问题错误点汇总

  • 空行判断条件完全错误:line2.StartsWith("") 对所有非null字符串都会返回True,无法筛选出空行,正确的空行判断应该用String.IsNullOrWhiteSpace(line2)。
  • 输出对象错误:你修改的是Newlines数组,但最终写入文件用的是未做删空行处理的旧lines数组,相当于删空行的操作完全没生效。
  • 无效操作逻辑:File.ReadAllLines返回的每一行已经自动剔除了换行符,你执行line2.Replace(Environment.NewLine, String.Empty)没有任何实际作用。
  • 多余的二次读文件:不需要读完文件处理一次后,再重新读文件做删空行,完全可以在第一次处理的时候就过滤掉空行,减少IO操作。
  • 原提取逻辑的冗余:你直接把不需要的行设为空字符串,这些空值会留在数组中最终输出为空行,不如直接跳过不加入结果集。

修正后代码示例

方案1:最小改动修复现有逻辑

不需要二次读文件,第一次处理得到lines数组后直接过滤空行即可:

' 直接过滤lines数组中的空行后输出
Dim filteredLines = lines.Where(Function(line) Not String.IsNullOrWhiteSpace(line)).ToArray()
File.WriteAllLines("NewTextm3u.txt", filteredLines)

方案2:更高效的一次性处理逻辑

不需要先把无用行设为空再过滤,直接筛选需要的行写入结果:

Dim lines As String() = File.ReadAllLines(ofd.FileName)
Dim result As New List(Of String)

For Each line In lines
    ' 无用行直接跳过,不加入结果
    If line.StartsWith("#EXTM3U") OrElse line.StartsWith("#RADIOBROWSERUUID:") Then
        Continue For
    ' 处理频道名称行
    ElseIf line.StartsWith("#EXTINF:1,") Then
        result.Add(line.Replace("#EXTINF:1,", "#"))
    ' 处理流地址行(按你输出的规则补全了加@的逻辑,和你现有逻辑对齐)
    ElseIf Not String.IsNullOrWhiteSpace(line) Then
        result.Add("@" & line)
    End If
Next

File.WriteAllLines("NewTextm3u.txt", result)

内容的提问来源于stack exchange,提问作者John Henderson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:36:04