VB.NetでのCSV作成プログラム

## 経緯
VB.Netを人に説明する際のサンプルプログラムとして作成。
本来であれば、データベースより、DataTableを作成するところ、
仮のデータをテストデータとして作成しています。
また、メールも飛ばさないつくりとなっています。

## 行うこと
DataTableをcsvファイルとして出力をします。

## 開発環境
VisualStudio2022での開発
言語は、VB.Netを使用
FrameWorkは、4.7.2を使用

## プログラム
```
Imports System.Random
Imports System.IO

Module MainModule

    Public Sub Main()

        Dim message As String = ""

        Try

            Dim dt As DataTable = GetSampleDataTable()

            'ディレクトリ　管理者権限や資格情報が必要となる場合があり
            Dim csvDirectory As String = "C:\Users\jskm7\Documents\"


            Dim fileName As String = csvDirectory & "test" & DateTime.Now.ToString("yyyyMMddHHmmss") & ".csv"
            If System.IO.File.Exists(fileName) Then
                System.IO.File.Create(fileName)
            End If



            ConvertToCsv(dt, fileName, True)


        Catch ex As Exception

            message = "Error" & ex.ToString
            '必要に応じて、メールを飛ばす

        End Try


    End Sub

    Private Function GetSampleDataTable() As DataTable

        Dim dt As New DataTable

        dt.Columns.Add("PRIMARY_KEY", GetType(String))
        dt.Columns.Add("NAME", GetType(String))
        dt.Columns.Add("AGE", GetType(Integer))
        dt.Columns.Add("SEX", GetType(String))
        dt.Columns.Add("BLOOD_TYPE", GetType(String))

        Dim names() As String = {"Alice", " Bob", " Charlie", " David", " Eve", " Frank", " Grace", " Henry", " Irene", " Jack"}

        Dim bloodType() As String = {"A", "B", "O", "AB"}

        Dim sex() As String = {"male", "Female"}

        For i = 0 To 9

            Dim dr As DataRow = dt.NewRow

            dr("PRIMARY_KEY") = i
            dr("NAME") = names(i)
            dr("AGE") = i * 10
            dr("SEX") = sex(i Mod 2)

            '乱数作成0-3
            Dim r As New System.Random()

            Dim index As Integer = r.Next(10000)

            dr("BLOOD_TYPE") = bloodType(index Mod 3)

            dt.Rows.Add(dr)

        Next i

        Return dt

    End Function

    Public Sub ConvertToCsv(ByVal dt As DataTable, ByVal csvPath As String, ByVal headerFlg As Boolean)

        Dim enc As System.Text.Encoding =
            System.Text.Encoding.GetEncoding("Shift_JIS")

        Dim sr As New System.IO.StreamWriter(csvPath, False, enc)

        Dim colCount As Integer = dt.Columns.Count
        Dim lastColIndex As Integer = colCount - 1
        Dim i As Integer

        'ヘッダー追加
        If headerFlg Then
            For i = 0 To colCount - 1
                'ヘッダの取得
                Dim field As String = dt.Columns(i).Caption
                'フィールドを書き込む
                sr.Write(field)
                'カンマを書き込む
                If lastColIndex > i Then
                    sr.Write(","c)
                End If

            Next
            '改行する
            sr.Write(vbCrLf)
        End If

        'レコードを書き込む
        Dim row As DataRow
        For Each row In dt.Rows

            For i = 0 To colCount - 1
                'フィールドの取得
                Dim field As String = row(i).ToString()

                'フィールドを書き込む
                sr.Write(field)
                'カンマを書き込む
                If lastColIndex > i Then
                    sr.Write(","c)
                End If

            Next

            sr.Write(vbCrLf)

        Next

        'ファイルを閉じる
        sr.Close()

    End Sub

End Module

```

## 補足
参考として、下記サイトを利用しました。
VB.Netに関して有益な情報もあるため、参照してみてください。
https://dobon.net/vb/dotnet/file/writecsvfile.html

以上！