1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

経緯

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

以上!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?