将CSV文件数据导入两行之间的DataGridView

时间:2014-03-25 22:25:08

标签: sql vb.net csv datagridview

我完全迷失了。这是正在发生的事情。我有一个包含大量数据的CSV文件,但是我只需要这些数据。网上有一堆关于按范围选择它的东西(例如:F15:L20),但我不知道这些数据是因为它会改变 - 取决于条目的数量。

以下是CSV文件示例

NAME      RYAN
DATE      3/25/2014

ID        SECID         FID      LAST NAME      FIRST NAME          NOTES
1         3             1003     Doe            John                -
2         4             1004     Doe            John                -
3         5             1005     Doe            John                -
4         2             1002     Doe            John                -
5         1             1001     Doe            John                -
FINAL
ID        SECID         FID      LAST NAME      FIRST NAME          NOTES
**1         4             1004     Doe            John**              -
**2         5             1005     Doe            John**              -
**3         2             1002     Doe            John**              -
**4         3             1003     Doe            John**              -
**5         1             1001     Doe            John**              -
OTHER RECORDS

我需要导入的是ID, SECID, FID, LAST NAME, & FIRST NAME所有FINAL(范围由星号选择)。由于我们不知道有多少条记录(在这种情况下为5条)我需要能够通过值FINALOTHER RECORDS进行搜索,然后我可以在{{1}之后跳过一行然后通过列E(名字)选择所有内容,直到找到值FINAL值的位置。

理论上,我可以在CSV文件中搜索OTHER RECORDS,获取其位置,然后完成所有操作。在这种情况下,它会是这样的。 FINAL的位置是A10。如果我们将行值减去5,我们就会知道有多少条记录。现在我们添加跳过第11行,然后选择A12到E17中的所有内容,我们将得到值。

如果这很令人困惑,我很抱歉。我只是找不到解释它的好方法。我相信我可以通过搜索文件FINAL并获取它的位置然后进行数学计算以确定有多少记录然后使用范围来收集数据来实现这一点。但是,我发布了其他所有内容以防万一有人更容易做事。所以我的问题是如何在CSV文件中搜索值,然后获取该值的单元格位置,或者如果有更好的方法可以执行此操作 - 我该怎么做?f

1 个答案:

答案 0 :(得分:0)

Imports System.IO

Public Class Form1
  'Add a button and a datagridview to the form'
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim strFilename As String = "C:\Junk\Junk.CSV"
    Dim blnFinal As Boolean = False 'wait until we find a line that says "FINAL"'
    Dim dtb As New DataTable
    dtb.Columns.Add(New DataColumn("ID", GetType(String)))
    dtb.Columns.Add(New DataColumn("SECID", GetType(String)))
    dtb.Columns.Add(New DataColumn("FID", GetType(String)))
    dtb.Columns.Add(New DataColumn("LAST NAME", GetType(String)))
    dtb.Columns.Add(New DataColumn("FIRST NAME", GetType(String)))
    Using sr As New StreamReader(strFilename, False)
      Do Until sr.EndOfStream
        Dim strLine As String = sr.ReadLine() 'read a line'
        If Not blnFinal Then
          If strLine.ToUpper = "FINAL" Then
            blnFinal = True
          End If
        Else
          If strLine.ToUpper = "OTHER RECORDS" Then
            Exit Do 'finished'
          End If
          Dim strFields() As String = strLine.Split(","c)
          If strFields(0) <> "ID" Then 'ignore header row'
            dtb.Rows.Add(strFields(0), strFields(1), strFields(2), strFields(3), strFields(4))
          End If
        End If
      Loop
    End Using
    DataGridView1.DataSource = dtb
  End Sub
End Class