我完全迷失了。这是正在发生的事情。我有一个包含大量数据的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条)我需要能够通过值FINAL
和OTHER RECORDS
进行搜索,然后我可以在{{1}之后跳过一行然后通过列E(名字)选择所有内容,直到找到值FINAL
值的位置。
理论上,我可以在CSV文件中搜索OTHER RECORDS
,获取其位置,然后完成所有操作。在这种情况下,它会是这样的。 FINAL
的位置是A10。如果我们将行值减去5,我们就会知道有多少条记录。现在我们添加跳过第11行,然后选择A12到E17中的所有内容,我们将得到值。
如果这很令人困惑,我很抱歉。我只是找不到解释它的好方法。我相信我可以通过搜索文件FINAL
并获取它的位置然后进行数学计算以确定有多少记录然后使用范围来收集数据来实现这一点。但是,我发布了其他所有内容以防万一有人更容易做事。所以我的问题是如何在CSV文件中搜索值,然后获取该值的单元格位置,或者如果有更好的方法可以执行此操作 - 我该怎么做?f
答案 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