2016-09-14 18 views
0

私は、指紋照合装置からレポートにテキストファイルを処理するコードを作成しようとしています。VBのデータテーブルの既存の列に基づいて新しい列を追加する方法は?

テキストファイルの入力例、

001;0000000000200004;01-07-2016;15:31;01;01

セミコロン区切り文字で、

machinecode;personid;dateDD-MM-YYYY;timeHH:MM;jobid;unused

これが私の最後の成功コード

Imports System.IO 
Imports System.Windows.Forms 

Public Class Form1 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim lines = IO.File.ReadAllLines("C:\Users\Adventa\Documents\Visual Studio 2010\Projects\AbsensiALU\AbsensiALU\Absen.txt") 
    Dim tblabsen = New DataTable 
    Dim colCount = lines.First.Split(";"c).Length 

    For i As Int32 = 1 To colCount 
     'Dim header As String 
     tblabsen.Columns.Add(New DataColumn("Column_" & i, GetType(String))) 
    Next 
    For Each line In lines 
     Dim objFields = From field In line.Split(";"c) 

     Dim newRow = tblabsen.Rows.Add() 


     newRow.ItemArray = objFields.ToArray() 

    Next 
    Dim table1 As New DataTable 
    table1 = tblabsen.Copy() 

    table1.Columns(0).ColumnName = "No. Mesin" 
    table1.Columns(1).ColumnName = "NIK" 
    table1.Columns(2).ColumnName = "Tanggal" 
    table1.Columns(3).ColumnName = "Jam" 
    table1.Columns(4).ColumnName = "Keterangan" 

    DataGridView1.DataSource = table1 
    DataGridView1.AutoResizeColumn(0) 
    DataGridView1.AutoResizeColumn(1) 
    DataGridView1.AutoResizeColumn(2) 
    DataGridView1.AutoResizeColumn(3) 
    DataGridView1.AutoResizeColumn(4) 

    DataGridView1.Columns(5).Visible = False 


    Dim rowData As String = "" 

    'dt is the name of the data table 
    For Each row As DataRow In table1.Rows 
     For Each column As DataColumn In table1.Columns 
      rowData = rowData & column.ColumnName & "=" & row(column) & " " 
     Next 
     rowData = rowData & vbNewLine & vbNewLine 
    Next 



End Sub 



Private Sub DataGridView1_CellContentClick_1(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick 


End Sub 

End Class 

今私は追加したいですカラムそこにそれはtable1.columnsに基づいて、(4)は、おそらくIF/CASEオペレータと、例えば新しい列が「KETE」が新しい列に書き込むことができると仮定すると、この

Dim kete As String 
Select Case tblabsen.Columns(4).GetType.ToString() 
      Case "00" 
       kete = "Masuk" 
      Case "01" 
       kete = "Pergi" 
      Case "02" 
       kete = "Kembali" 
      Case "03" 
       kete = "Pulang" 
      Case Else 
       kete = "Error" 
     End Select 

ようになるので。

ありがとうございます。

答えて

0

あなたはその後最初

For i As Int32 = 1 To colCount + 1 
    'Dim header As String 
    tblabsen.Columns.Add(New DataColumn("Column_" & i, GetType(String))) 
Next 

1つの余分な列を追加する必要があるので、あなたはForEach

For Each line In lines 
    Dim objFields = line.Split(";"c).ToList() 
    Dim newRow = tblabsen.Rows.Add() 

    Dim kete As String 
    Select Case objField(4).GetType.ToString() 
     Case "00" 
      kete = "Masuk" 
     Case "01" 
      kete = "Pergi" 
     Case "02" 
      kete = "Kembali" 
     Case "03" 
      kete = "Pulang" 
     Case Else 
      kete = "Error" 
    End Select 
    objFields.Add(kete) 

    newRow.ItemArray = objFields.ToArray() 
Next 

であなたの値を代入する必要があり、また、あなたがする必要がある、DataTable独自に作成する必要がありあなたのコードの残りの部分でこの余分な列を扱う(すなわち、サイズ変更、列名)

+0

あなたの応答のためにありがとうアレックス、それは新しい列を追加するための私の問題を解決しますが、彼は新しい列または 'ケテ'値は常に "エラー"またはSELECT演算子が動作していないと私はそれについては考えていないと言うことができます。たぶん将来の参照のために単一のセルまたは列を抽出する方法を理解する必要もあります。 –

+0

@JoeAdventaあなたはデバッグモードで何を持っているか試してみましたか?私は '.GetType.ToString()'を省略することができると信じています。 – Prisoner

+0

'.GetType.ToString()'を単に削除するだけです。今度は、新しい列変数を追加する前に、値を計算する方法について学習する必要があります。非常にアレックスありがとうございます。 –

関連する問題