如何删除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
相关产品推荐
相关产品推荐

