如何在VB.NET中跳过指定CSV行并写入新文件
解决方案
原代码一次性读取整个文件内容的方式无法实现逐行筛选逻辑,需要改为逐行读取、判断、写入的方式。以下是修改后的代码及说明:
关键修改点
- 替换一次性读取为逐行读取,避免大文件场景下内存占用过高
- 对每行按逗号分割字段,注意VB中数组索引从0开始,第54个字段对应索引
53,判断该字段是否包含"DISAPPROVE" - 仅将符合条件的行写入新文件
修改后的完整代码
' 读取原文件并逐行处理 Using reader As New StreamReader("R:\FilePath.csv") Using writer As New StreamWriter("R:\NewFilePath.csv") ' 先写入表头(原文件无表头可删除此段) Dim headerLine As String = reader.ReadLine() If Not String.IsNullOrEmpty(headerLine) Then writer.WriteLine(headerLine) End If ' 逐行处理数据行 Dim currentLine As String Do While reader.Peek() <> -1 currentLine = reader.ReadLine() If String.IsNullOrEmpty(currentLine) Then Continue Do ' 跳过空行,可根据需求调整 End If ' 分割字段(注意:若字段含带逗号的引号内容,需用专门CSV解析库,此为简单场景处理) Dim fields() As String = currentLine.Split(","c) ' 检查字段数量,避免索引越界 If fields.Length >= 54 Then ' 判断第54个字段是否为DISAPPROVE,忽略大小写 If Not fields(53).Trim().Equals("DISAPPROVE", StringComparison.OrdinalIgnoreCase) Then writer.WriteLine(currentLine) End If Else ' 字段不足54个的行,此处选择直接写入,可根据需求改为跳过 writer.WriteLine(currentLine) End If Loop End Using End Using
额外说明
- 使用
Using语句可自动释放文件资源,比手动调用Close()更安全可靠 - 若CSV存在带引号包含逗号的复杂字段(例如
"Doe, Jane"),简单Split(",")会出错,建议使用Microsoft.VisualBasic.FileIO.TextFieldParser或第三方CSV解析库处理 - 若不需要忽略大小写判断,可删除
StringComparison.OrdinalIgnoreCase参数,直接使用fields(53).Trim().Equals("DISAPPROVE")
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

