从csv文件读取和写入

时间:2014-11-22 12:09:37

标签: vb.net csv

Structure TownType
    Dim Name As String
    Dim County As String
    Dim Population As Integer
    Dim Area As Integer
End Structure

Sub Main()
    Dim TownList As TownType
    Dim FileName As String
    Dim NumberOfRecords As Integer
    FileName = "N:\2_7_towns(2).csv"

    FileOpen(1, FileName, OpenMode.Random, , , Len(TownList))
    NumberOfRecords = LOF(1) / Len(TownList)
    Console.WriteLine(NumberOfRecords)
    Console.ReadLine()

文件中只有12条记录,但是对于记录数,它返回值24。我该如何解决这个问题?

csv文件的内容:

Town, County,Pop, Area
Berwick-upon-tweed, Nothumberland,12870,468
Bideford, devon,16262,430
Bognor Regis, West Sussex,62141,1635
Bridlington, East Yorkshire,33589,791
Bridport, Dorset,12977,425
Cleethorpes, Lincolnshire,31853,558
Colwyn bay, Conway,30269,953
Dover, Kent,34087,861
Falmouth, Cornwall,21635,543
Great Yarmouth, Norfolk,58032,1467
Hastings, East Sussex,85828,1998

2 个答案:

答案 0 :(得分:0)

这会将内容读入集合中,您可以从集合中获取记录数。

    Sub Main()

    Dim FileName As String
    Dim NumberOfRecords As Integer
    FileName = "N:\2_7_towns(2).csv"

    'read the lines into an array
    Dim lines As String() = System.IO.File.ReadAllLines(FileName)

    'read the array into a collection of town types
    'this could also be done i a loop if you need better
    'parsing or error handling
    Dim TownList = From line In lines _
        Let data = line.Split(",") _
            Select New With {.Name = data(0), _
                             .County = data(1), _
                             .Population = data(2), _
                             .Area = data(3)}

    NumberOfRecords = TownList.Count
    Console.WriteLine(NumberOfRecords)
    Console.ReadLine()

End Sub

写入控制台将通过以下方式完成:

For Each town In TownList
    Console.WriteLine(town.Name + "," + town.County)
Next

答案 1 :(得分:0)

许多方法可以做到这一点 测试一下:

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    dim FileName as string = "N:\2_7_towns(2).csv"
    Dim Str() As String = System.IO.File.ReadAllLines(filename)
    'Str(0) contains : "Town, County,Pop, Area"
    'Str(1) contains : "Berwick-upon-tweed, Nothumberland,12870,468"
    'Str(2) contains : "Bideford, devon,16262,430"
    ' etc...

    'Sample code for string searching :
    Dim Lst As New List(Of String)
    Lst.Add(Str(0))
    Dim LookingFor As String = "th"
    For Each Line As String In Str
        If Line.Contains(LookingFor) Then Lst.Add(Line)
    Next
    Dim Result As String = ""
    For Each St As String In Lst
        Result &= St & Environment.NewLine
    Next
    MessageBox.Show(Result)

    'Sample code creating a grid :
    Dim Grid = New DataGridView
    Me.Controls.Add(Grid)
    Grid.ColumnCount = Str(0).Split(","c).GetUpperBound(0) + 1
    Grid.RowCount = Lst.Count - 1
    Grid.RowHeadersVisible = False

    For r As Integer = 0 To Lst.Count - 1
        If r = 0 Then
            For i As Integer = 0 To Lst(r).Split(","c).GetUpperBound(0)
                Grid.Columns(i).HeaderCell.Value = Lst(0).Split(","c)(i)
            Next
        Else
            For i As Integer = 0 To Lst(r).Split(","c).GetUpperBound(0)
                Grid(i, r - 1).Value = Lst(r).Split(","c)(i)
            Next
        End If

    Next
    Grid.AutoResizeColumns()
    Grid.AutoSize = True
End Sub