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-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 테이블의 03 열에 여러 행이 삽입 될 것입니다. 감사합니다. –

+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 환영합니다. 귀하의 질문에 대한 답변이 있으면 답변으로 표시하십시오. –