我正在尝试使用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
非常感谢任何帮助
答案 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+^", ""))