VB.NET中如何按需读取CSV指定行(如第30-50行)
读取CSV指定行范围的VB.NET实现
要实现仅读取CSV的指定行范围(如第30-50行)且避免遍历全部行,可以通过跳过前置行+读取目标范围的方式优化,以下是针对你现有代码的修改方案:
核心思路
- 定义目标行的起始和结束位置(注意:若CSV包含表头,需区分表头行和数据行,比如表头算第1行,数据行从第2行开始)
- 先跳过起始行之前的所有行,无需处理这些行的数据
- 读取并处理起始行到结束行的内容,完成后立即停止,不再继续遍历后续行
修改后的完整代码
' 定义目标行范围(示例:读取第30到50行,若有表头需自行调整行号) Dim startLine As Integer = 30 Dim endLine As Integer = 50 Dim currentLine As Integer = 1 Dim textFieldParser As TextFieldParser = New TextFieldParser(TextBox1.Text) With { .TextFieldType = FieldType.Delimited, .Delimiters = New String() {","} } drv = New ChromeDriver(options) Try ' 第一步:跳过起始行之前的所有行 While currentLine < startLine AndAlso Not textFieldParser.EndOfData textFieldParser.ReadFields() ' 仅读取不处理 currentLine += 1 End While ' 第二步:读取并处理目标行范围 While currentLine <= endLine AndAlso Not textFieldParser.EndOfData Dim strArrays As String() = textFieldParser.ReadFields() ' 确保当前行有足够的列数 If strArrays IsNot Nothing AndAlso strArrays.Length >= 3 Then Dim name As String = strArrays(0) Dim alamat As String = strArrays(1) Dim notlp As String = strArrays(2) drv.Navigate().GoToUrl("URL") Dim Nm = drv.FindElement(By.XPath("/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input")) Nm.SendKeys(name) Threading.Thread.Sleep(3000) Else MsgBox($"第 {currentLine} 行列数不足,已跳过") End If currentLine += 1 End While Catch ex As Exception MsgBox($"处理第 {currentLine} 行时出错:{ex.Message},已跳过") Finally ' 确保释放资源 textFieldParser.Close() drv.Quit() End Try
关键说明
- 行号计数:代码中
currentLine从1开始计数,若你的CSV第一行是表头,需要读取的数据行是第30-50行(表头不算数据行),则需将startLine设为31,endLine设为51,或者调整初始currentLine为0后再判断。 - 资源释放:新增
Finally块确保TextFieldParser和ChromeDriver被正确关闭,避免资源泄漏。 - 边界处理:加入了对
strArrays是否为空、列数是否足够的判断,减少异常触发概率。
内容的提问来源于stack exchange,提问作者bebright
相关产品推荐
相关产品推荐

