晴耕雨読

working in the fields on fine days and reading books on rainy days

[VB.NET] 配列(CSV)をDataRowに変換する

DataRowに複数の値を格納するには Item[String] を使う方法と、ItemArray を使う方法があります。 ここではサンプルとして、1. 要素を一つずつDataRowに格納する例、2. 配列をDataRowに変換する例、3. CSVをDataRowに変換する例 のVB.NETプログラムを示します。

Imports System
Imports System.Data

Module VBModule

    Sub Main()

        'テーブルの列を定義
        Dim columns As DataColumn() = {
            New DataColumn("商品名", System.Type.GetType("System.String")),
            New DataColumn("個数", System.Type.GetType("System.Decimal")),
            New DataColumn("料金", System.Type.GetType("System.Decimal"))
        }

        'テーブルに列を追加
        Dim dt As DataTable = New DataTable
        dt.Columns.AddRange(columns)

        'テーブルにレコード追加
        '1件目(要素を一つずつDataRowに格納する例)
        Dim newRow1 As DataRow = dt.NewRow
        newRow1("商品名") = "りんご"
        newRow1("個数") = 12
        newRow1("料金") = 2000D
        dt.Rows.Add(newRow1)
        '2件目(配列をDataRowに変換する例)
        Dim record2 As Object() = {"みかん", 6, 1000D}
        Dim newRow2 As DataRow = dt.NewRow
        newRow2.ItemArray = record2
        dt.Rows.Add(newRow2)
        '3件目(CSVをDataRowに変換する例)
        Dim record3 As String() = "いちご,8,1500".Split(",") 'カンマ区切りを配列にする
        Dim newRow3 As DataRow = dt.NewRow
        newRow3.ItemArray = record3
        dt.Rows.Add(newRow3)

        'テーブル内のレコードを表示
        For i As Integer = 0 To dt.Rows.Count - 1
            Console.WriteLine((i+1) & "件目")
            For Each col As DataColumn In dt.Columns
                Console.WriteLine("  " & col.ColumnName & " : " & dt.Rows(i)(col).ToString)
            Next
        Next
        ' => 1件目
        '      商品名 : りんご
        '      個数 : 12
        '      料金 : 2000
        '    2件目
        '      商品名 : みかん
        '      個数 : 6
        '      料金 : 1000
        '    3件目
        '      商品名 : いちご
        '      個数 : 8
        '      料金 : 1500

    End Sub

End Module

DataRowに値を格納する方法には datarow("カラム名") = 値datarow.ItemArray = 配列 の2通りあります。 配列の型は Object() や String() でもどちらでもOKです。

入力ファイルがCSVで、レコードの各要素の値が全て存在するときは、後者の ItemArray を使うことで簡単に配列をDataRowに変換できます。

上のコード例では、CSVを配列にするときに Split(",") を使っていますが、CSVの仕様では aaa,bbb,ccc"aaa","b 改行 bb","c""cc" も正しいCSVデータなので、入力データの形式は事前に確認しておきましょう。

以上です。

参照