我有一个文本文件名list.txt,其中包含以下数据;
AC-No. Name Time State New State Exception
100 ZULFIQUAR 09/04/2012 01:53 PM C/In Invalid
100 ZULFIQUAR 10/04/2012 01:39 PM C/In Invalid
100 ZULFIQUAR 11/04/2012 01:38 PM C/In Invalid
1002 SAQIB 09/04/2012 10:42 PM C/In C/Out OK
1002 SAQIB 10/04/2012 08:01 AM C/In OK
1002 SAQIB 10/04/2012 10:28 PM C/In C/Out OK
1002 SAQIB 11/04/2012 09:25 AM C/In OK
1002 SAQIB 11/04/2012 10:40 PM C/In C/Out OK
1002 SAQIB 12/04/2012 07:15 AM C/In OK
1002 SAQIB 12/04/2012 11:12 PM C/In C/Out OK
1002 SAQIB 13/04/2012 07:23 AM C/In OK
1002 SAQIB 13/04/2012 10:53 PM OverTime Out Invalid
1002 SAQIB 14/04/2012 06:58 AM OverTime Out Invalid
1002 SAQIB 15/04/2012 10:50 PM C/In Invalid
1002 SAQIB 16/04/2012 07:09 AM C/In OK
1002 SAQIB 17/04/2012 10:36 PM C/In C/Out OK
1002 SAQIB 18/04/2012 07:21 AM C/In OK
1002 SAQIB 18/04/2012 10:46 PM C/In C/Out OK
1002 SAQIB 19/04/2012 06:32 AM C/In OK
1002 SAQIB 19/04/2012 10:47 PM C/In C/Out OK
现在我必须选择整列三列(AC-No,Name.Time),并为datagridview提供数据源。 现在我使用以下代码,但没有运气。
Dim tbl As New DataTable("mytable")
tbl.Columns.Add("col1", GetType(String))
'tbl.Columns.Add("col2", GetType(String))
'tbl.Columns.Add("col3", GetType(Integer))
Dim sFilename As String = TextBox1.Text
Dim myStream As System.IO.StreamReader = New System.IO.StreamReader(sFilename)
Dim line As String
Dim aRow As DataRow
Do
line = myStream.ReadLine()
If line Is Nothing Then
Exit Do
End If
Dim sAry As String() = Split(line, " ")
aRow = tbl.NewRow
aRow(0) = sAry(0)
'aRow(1) = sAry(1)
' aRow(2) = sAry(2)
tbl.Rows.Add(aRow)
Loop
myStream.Close()
DataGridView1.DataSource = tbl
请帮帮我。
答案 0 :(得分:4)
Dim delimiter As String = ","
Dim fileName As String = "c:\file.txt"
Dim sr As New StreamReader(fileName)
Try
While sr.Peek() >= 0
Dim r As String = sr.ReadLine()
Dim items As String() = r.Split(delimiter.ToCharArray())
End While
Finally
sr.Close()
End Try
答案 1 :(得分:2)
假设1)你已经显示了一个固定列宽的文件,2)你需要时间作为DateTime而不是字符串,3)AC-No。真的是一个字符串而不是整数:
Imports System.Globalization
Sub GetData()
Dim tbl As New DataTable("mytable")
tbl.Columns.Add("col1", GetType(String))
tbl.Columns.Add("col2", GetType(String))
tbl.Columns.Add("col3", GetType(DateTime))
Dim sFilename As String = "C:\temp\testdata.txt"
Using myStream As System.IO.StreamReader = New System.IO.StreamReader(sFilename)
Dim ac As String
Dim username As String
Dim clocktime As DateTime
Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture("en-GB")
Dim line As String
Dim aRow As DataRow
While Not myStream.EndOfStream
line = myStream.ReadLine().TrimEnd
' check line is long enough to be valid
If line.Length >= 48 Then
' take the first 8 characters as AC-No.
ac = line.Substring(0, 8).Trim
' a valid line does not start with "AC-No"
If Not ac.StartsWith("AC-No") Then
' extract the name and remove any extra spaces
username = line.Substring(9, 20).Trim
' extract the time and convert it to a DateTime
clocktime = DateTime.Parse(line.Substring(29, 19), culture, DateTimeStyles.AllowWhiteSpaces)
aRow = tbl.NewRow
aRow(0) = ac
aRow(1) = username
aRow(2) = clocktime
tbl.Rows.Add(aRow)
End If
End If
End While
End Using
DataGridView1.DataSource = tbl
' example of formatting the third column
DataGridView1.Columns(2).DefaultCellStyle.Format = "dd-MMM-yyyy HH:mm"
End Sub
(测试为在VB2010中使用您的数据,如图所示。)
答案 2 :(得分:0)
只是一个建议,尝试mystream.readtoend(),然后在每个vbnewline切片,之后你的每一行都有一个单独的字符串,你可以在那里调试它并一直玩,直到你得到正确的结果。