如何从文本文件中删除空行

时间:2017-11-02 17:03:39

标签: vb.net linq text

我正在尝试使用vb.net从文本文件中删除空行。这是我到目前为止所尝试的一个例子,但它没有按预期工作:

Dim i As Integer = 0
    Dim CountDeleted = 0
    Dim TextString As String

    For Each Line As String In lines
        TextString = lines(i)
        If TextString.Trim = "" Then
            lines.RemoveAt(i)
            CountDeleted += 1
        End If
        i += 1
    Next Line

这是一个文本文件中的数据示例,我想删除以下行:

BUSINESS_UNIT|PO_ID|LINE_NBR|CANCEL_STATUS|

A

B
C

必需的输出:

BUSINESS_UNIT|PO_ID|LINE_NBR|CANCEL_STATUS|    
A
B
C

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

要删除所有空白行,只需使用linq

一行代码
 Dim nonBlank = lines.Where(Function(x) Not String.IsNullOrWhiteSpace(x))

对删除的计数只是两个列表中元素之间的差异

Dim CountDeleted = lines.Count - nonBlank.Count

您的代码将触发运行时异常,因为您要从使用For Each循环枚举的同一集合中删除项目。
您可以切换到旧式的For Next循环,但要小心从集合的末尾开始,并检查字符串到集合的开头。

For i = lines.Count - 1 To 0 Step - 1
    TextString = lines(i)
    If string.IsNullOrWhiteSpace() Then
        lines.RemoveAt(i)
        CountDeleted += 1
    End If
Next 

此向后循环是必需的,因为当您从集合中删除项目时,总项目数减少,当前索引后面的项目将滑动一个位置。正常(转发)循环将跳过以检查删除后的项目。

答案 1 :(得分:0)

List(Of String)删除所有WhiteSpace字符串:

lines.RemoveAll(addressOf String.IsNullOrWhiteSpace)

从文本文件中删除所有WhiteSpace行:

File.WriteAllText(path, Regex.Replace(File.ReadAllText(path), "(?m)^\s+^", ""))