0

重複を含む .CSV があります。dataTable に入力すると、重複を除外して特定のセルを追加したいと考えています。

私のコラム:

  With table.Columns
            .Add(currentRow(0).ToString) '0
            .Add(currentRow(3).ToString) '3
            .Add(currentRow(5).ToString) '5
            .Add(currentRow(6).ToString) '6
            .Add(currentRow(8).ToString) '8
        End With

私のヘッダー:

table.Rows.Add(table.Columns(0).ToString, table.Columns(1).ToString, table.Columns(2).ToString, table.Columns(3).ToString, table.Columns(4).ToString)

そして、現在の行をテーブルに既にあるものにチェックすると、「位置#に行がありません」というエラーが表示されます

ヘッダーを定義するこのコードが含まれているが、フォーマットが不適切な場合にのみ機能します。

 With table.Rows
                .Add(currentRow(0).ToString) '0
                .Add(currentRow(3).ToString) '3
                .Add(currentRow(5).ToString) '5
                .Add(currentRow(6).ToString) '6
                .Add(currentRow(8).ToString) '8
            End With

これは、currentRow の要素を最初の列と行と比較する If ステートメントです。

 If currentRow(0).ToString Is table.Rows(someVal).Item(0) Then

テストでは、適切にフォーマットされたヘッダーを確認できますが、If ステートメントはそれを認識しません。

4

1 に答える 1

0

このIsキーワードは、2 つのオブジェクト参照が同じオブジェクトを参照するかどうかを決定しますが、オブジェクトの値は比較しません。=代わりに使用

If currentRow(0).ToString = table.Rows(someVal).Item(0) Then 

DataTable は、重複を除外するための適切なオブジェクトですか? 適切な方法でデータを表すクラスを作成することを検討してください。クラスでメソッドをオーバーライドするEqualsと、LINQ を使用して個別のオブジェクトを簡単に取得できます。

Dim list = New List(Of MyClass)

' Add objects
list.Add(New MyClass(...))
list.Add(New MyClass(...))
...

'Get unique objects
Dim unique = list.Distinct()
For Each obj As MyClass In unique
    ' process obj
Next
于 2012-08-30T19:38:30.903 に答える