経緯
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
以上!