VB.NETでCSVファイルを読み書き!初心者でもわかる操作方法を完全解説
生徒
「先生、エクセルで使うようなデータを自分のプログラムで読み込んだり、保存したりしたいのですが、何か良い方法はありますか?」
先生
「それなら、CSVファイルという形式を扱うのが一番おすすめですよ。VB.NETを使えば、とても簡単にCSVの読み書きができます。」
生徒
「CSVって聞いたことはありますが、難しそうですね。プログラミングが初めての私でもできますか?」
先生
「大丈夫ですよ!CSVはただのテキストデータですから、基本さえ覚えれば誰でも扱えます。具体的な手順を一緒に見ていきましょう!」
1. CSVファイルとは何かを知ろう
CSV(シーエスブイ)とは、「Comma Separated Values」の略で、日本語に直すと「カンマで区切られた値」という意味になります。名前の通り、データとデータの間を「,(カンマ)」で区切って並べた非常にシンプルなファイル形式です。
例えば、名簿データであれば「名前,年齢,出身地」のように一行にまとめられます。この形式の最大の特徴は、メモ帳などのテキストエディタで中身が見られるだけでなく、Excel(エクセル)などの表計算ソフトでも開ける点にあります。特定のソフトに依存しないため、プログラムでデータを扱う際に最もよく使われる形式の一つです。初心者の方は、まずは「カンマで区切られただけの単純なテキストデータ」だと考えておけば問題ありません。
2. CSVファイルを一行ずつ読み込む基本コード
まずは、すでにあるCSVファイルをプログラムで読み込む方法を学びましょう。VB.NETでは TextFieldParser(テキストフィールドパーサー)という便利な道具を使うのが一般的です。これは、カンマ区切りのデータを自動的にバラバラにしてくれる優れた機能を持っています。
以下のコードは、ファイルから一行ずつデータを取り出し、画面に表示する最も基本的な形です。ファイルを扱う際は、まず「ファイルを開く」、次に「中身を読む」、最後に「ファイルを閉じる」という三つのステップがあることを意識してください。プログラミングの世界では、使い終わったファイルを片付けることは非常に大切なマナーです。
' ファイルを読み込むための準備
Using reader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\test\sample.csv")
' カンマ区切りであることを指定
reader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited
reader.SetDelimiters(",")
' ファイルの最後まで繰り返す
While Not reader.EndOfData
' 一行分を読み込んで配列にする
Dim fields As String() = reader.ReadFields()
' 読み込んだ内容を順番に表示
For Each item In fields
Console.Write(item & " ")
Next
Console.WriteLine()
End While
End Using
3. CSVファイルにデータを書き込む方法
次に、プログラムで作ったデータをCSVファイルとして保存(書き込み)してみましょう。書き込みには StreamWriter(ストリームライター)という道具を使います。これは、文字をファイルに書き出すための「ペン」のような役割を果たします。
書き込む際のコツは、データとデータの間に自分でカンマ "," を入れることです。また、一行書き終わるごとに改行を入れることで、正しいCSV形式になります。ファイルが存在しない場合は自動的に新しく作られ、すでにある場合は上書きされます。保存する場所(パス)を間違えるとエラーになるので、あらかじめフォルダが存在するか確認しておきましょう。
' 書き込み用のペンを用意する
Dim filePath As String = "C:\test\output.csv"
Using writer As New System.IO.StreamWriter(filePath, False, System.Text.Encoding.UTF8)
' データを一行分用意して書き込む
Dim line1 As String = "田中太郎" & "," & "25" & "," & "東京都"
writer.WriteLine(line1)
' 二行目も同じように書き込む
Dim line2 As String = "佐藤花子" & "," & "30" & "," & "大阪府"
writer.WriteLine(line2)
End Using
Console.WriteLine("ファイルの保存が完了しました")
4. 文字化けを防ぐエンコーディングの知識
CSVを扱う上で、初心者が必ずと言っていいほど直面する問題が「文字化け」です。文字化けとは、保存した文字が変な記号になってしまう現象のことです。これは、パソコンが文字を数値として扱う際の「通訳のルール(エンコーディング)」が食い違っているために起こります。
日本では古くから「Shift-JIS(シフトジス)」というルールが使われてきましたが、現在は世界共通の「UTF-8(ユーティーエフエイト)」が主流です。ExcelでCSVを開く場合は、あえて古い「Shift-JIS」で保存しないと文字化けすることがあります。VB.NETで指定する場合は System.Text.Encoding.GetEncoding("Shift_JIS") のように記述します。自分が作ったファイルをどこで開くかに合わせて、このルールを使い分けることが大切です。
5. 特定の項目だけを取り出して計算に使う
CSVの真価は、読み込んだデータを計算や判定に使える点にあります。例えば、家計簿のCSVから「金額」の部分だけを取り出して合計を出すといった処理です。ReadFields で読み込んだデータは「配列(はいれつ)」という仕切りのある箱に入っています。
配列の番号は 0 番から始まることに注意してください。例えば、1番目の項目が名前、2番目が点数なら、点数を取り出すには (1) を指定します。以下のコードでは、特定の項目を取り出して、それを数値として計算に使う流れを確認しましょう。単なる表示だけでなく、情報を抜き出して活用できるようになると、プログラミングがぐっと面白くなります。
Dim totalScore As Integer = 0
Using reader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\test\scores.csv")
reader.SetDelimiters(",")
While Not reader.EndOfData
Dim data As String() = reader.ReadFields()
' 2列目(番号1)のデータを数値に変えて足す
Dim score As Integer = Integer.Parse(data(1))
totalScore += score
End While
End Using
Console.WriteLine("合計点数は " & totalScore & " 点です")
6. エラーからプログラムを守る例外処理
ファイルを扱うプログラムには、常にトラブルの可能性があります。「指定したファイルが見つからない」「別のソフトがそのファイルを開いていて使えない」「書き込もうとしたら容量がいっぱいだった」などです。これらの問題が起きると、プログラムは突然止まってしまいます。
これを防ぐために Try...Catch(トライ・キャッチ)という仕組みを使います。これは「もし失敗したら、この処理をしてね」という予約のようなものです。これにより、エラーが起きてもプログラムを安全に終了させたり、ユーザーにメッセージを表示したりできます。初心者のうちから「もしも」の事態に備える癖をつけておくことは、信頼されるプログラマーへの第一歩です。
Try
' エラーが起きるかもしれない処理
Dim text As String = System.IO.File.ReadAllText("C:\non_existent.csv")
Catch ex As System.IO.FileNotFoundException
' ファイルがなかったときの対応
Console.WriteLine("エラー:ファイルが見つかりませんでした。")
Catch ex As Exception
' その他のエラーが起きたときの対応
Console.WriteLine("予期せぬ問題が発生しました:" & ex.Message)
End Try
7. カンマを含むデータへの対応方法
少し応用的な内容ですが、CSVデータの中に「住所の中にカンマが含まれている」ような場合、単純な区切り方だとデータがズレてしまいます。これを防ぐために、CSVではデータを " "(ダブルクォーテーション)で囲むというルールがあります。
自分でこの複雑な処理を書くのは大変ですが、最初の方で紹介した TextFieldParser は、この「囲み文字」を自動的に認識して正しく処理してくれます。このように、VB.NETに用意されている便利な機能を正しく選ぶことで、複雑な問題も簡単に解決できます。データの形が少し変わっても慌てず、適切な道具を使うことが開発のコツです。
8. 複数のデータを一括で読み込むリストの活用
読み込んだデータをプログラムの中でずっと保持しておきたいときは、List(リスト)という動く箱を使います。配列と違って、後から中身の数を増やしたり減らしたりできるのが特徴です。
CSVの全データを一度リストに入れてしまえば、後から「並び替える」「特定の単語を検索する」といった高度な操作が自由自在になります。ファイル操作とリストの組み合わせは、業務システムなどで最もよく使われる王道のパターンです。大きなデータを扱う際は、この方法を思い出すようにしてください。
9. CSV操作をマスターするための練習ステップ
ここまで学んだことを定着させるには、実際に手を動かすのが一番です。まずは、自分のパソコンのCドライブなどに簡単なCSVファイルを作り、それを読み込むだけのプログラムを作ってみましょう。次に、読み込んだ文字に「さん」を付けて別のファイルに保存する、といった小さな改造を加えてみてください。
プログラムは、一度に全てを完成させる必要はありません。一行ずつ、一機能ずつ確認しながら進めることが大切です。VB.NETは画面の指示も分かりやすく、初心者にとって優しい言語です。CSV操作をマスターすれば、世の中にある膨大なデータを自由に操れるようになります。ぜひ自信を持って挑戦し続けてください!