从vb.net中的CSV文件中只读特定字段

时间:2010-04-29 21:43:39

标签: vb.net

我有这段代码来读取CVS文件。它读取每一行,用分隔符','分隔每一行,并将字段值存储在数组'strline()'中。

如何从CSV文件中仅提取必填字段?

例如,如果我有像

这样的CSV文件

类型,组,否,序列号,行号,日期(换行符)  0,管理员,3,345678,1,26052010(换行符)  1,职员,5,78654,3,26052010

我只需要列Group,Sequence No和date的值。

提前感谢任何想法。

Dim myStream As StreamReader = Nothing
    ' Hold the Parsed Data
    Dim strlines() As String
    Dim strline() As String
    Try
      myStream = File.OpenText(OpenFile.FileName)
      If (myStream IsNot Nothing) Then
        ' Hold the amount of lines already read in a 'counter-variable' 
        Dim placeholder As Integer = 0
        strlines = myStream.ReadToEnd().Split(Environment.NewLine)
        Do While strlines.Length <> -1 ' Is -1 when no data exists on the next line of the CSV file
          strline = strlines(placeholder).Split(",")
          placeholder += 1
        Loop
      End If
    Catch ex As Exception
      LogErrorException(ex)

    Finally

      If (myStream IsNot Nothing) Then
        myStream.Close()
      End If
    End Try

2 个答案:

答案 0 :(得分:7)

1)请勿使用String.Split !!

CSV数据可以包含逗号,例如

id,name
1,foo
2,"hans, bar"

同样如上所述,您需要处理引用的字段等...有关详细信息,请参阅CSV Info

2)查看TextFieldParser - 它就是这样的事情。

它将处理无法使用string.split ...

的各种不同的转义

示例来自:http://msdn.microsoft.com/en-us/library/cakac7e6.aspx

Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\TestFolder\test.txt")
    MyReader.TextFieldType = FileIO.FieldType.Delimited
    MyReader.SetDelimiters(",")
    Dim currentRow As String()
    While Not MyReader.EndOfData
        Try
            currentRow = MyReader.ReadFields()
            Dim currentField As String
            For Each currentField In currentRow
            MsgBox(currentField)
            Next
        Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
            MsgBox("Line " & ex.Message & "is not valid and will be skipped.")
        End Try
    End While
End Using

MyReader.ReadFields()部分将为您提供一系列字符串,从那里您需要使用索引等...

PK: - )

答案 1 :(得分:0)

也许不是只导入选定的字段,而是应该导入所有内容,然后只使用你需要的字段。