2012-04-30 140 views
2

我有一個文本文件名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 

請幫幫我。

+1

什麼問題,有什麼不行? –

回答

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 
+0

謝謝Rajeesh。但仍然不成功。其實我希望沒有空格的數據,因爲我必須插入整個列在sql表中03列將插入sql table的03列與一堆行。請查看 –

+0

感謝您的幫助。 –

0

只是一個建議,儘量mystream.readtoend(),然後在每一個vbnewline後,你對每一行,其中u可以調試它,直到你得到正確的結果玩一個單獨的串片。

+0

感謝您的建議。 –

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與您的數據的工作。)

+0

感謝這是有益的 –

+1

@Asifkhan不客氣。如果它回答您的問題,請將其標記爲答案。 –