2012-04-30 2 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-нет, 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 будут вставлять в 03 столбцы таблицы sql с букетом строк. пожалуйста, просмотрите –

+0

Спасибо вам за помощь. –

0

просто предложение, попробуйте mystream.readtoend(), а затем нарезать на каждом vbnewline после этого ваш иметь отдельную строку для каждой строки, где и может отладить его и играть вокруг, пока вы не получите нужный результат.

+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 Добро пожаловать. Если он отвечает на ваш вопрос, отметьте его как ответ. –

Смежные вопросы