CSVファイルは、データを保存や交換するための一般的な形式です。C#でプログラミングをしていると、CSVファイルを読み込む必要が出てくることがよくあります。特に大きなCSVファイルを効率的に処理する場合、StreamReaderクラスを使用することが重要です。この記事では、C#でStreamReaderを使ってCSVファイルを読み取る方法を、初心者の方にも分かりやすく解説します。
StreamReaderとは
StreamReaderは、C#の System.IO 名前空間に含まれるクラスで、テキストファイルを効率的に読み取るために使用されます。CSVファイルは基本的にテキストファイルなので、StreamReaderを使って簡単に読み取ることができます。
基本的なCSVファイルの読み取り方法
以下に、StreamReaderを使用してCSVファイルを読み取る基本的な方法を示すコード例を見てみましょう。
using System;
using System.IO;
class CsvReaderExample
{
static void Main()
{
string filePath = "sample.csv"; // CSVファイルのパス
try
{
using (StreamReader reader = new StreamReader(filePath))
{
string line;
// ファイルの終わりまで1行ずつ読み込む
while ((line = reader.ReadLine()) != null)
{
// カンマで分割
string[] values = line.Split(',');
// 各値を処理
foreach (string value in values)
{
Console.Write($"{value.Trim()} | ");
}
Console.WriteLine();
}
}
}
catch (IOException e)
{
Console.WriteLine($"ファイルの読み込み中にエラーが発生しました: {e.Message}");
}
}
}
このコードでは、以下の手順でCSVファイルを読み込んでいます:
- StreamReaderオブジェクトを作成し、CSVファイルを開きます。
while
ループを使用して、ファイルの終わりまで1行ずつ読み込みます。- 各行を
Split
メソッドでカンマ区切りで分割し、個々の値を取得します。 - 読み込んだデータを表示します(実際の処理はここで行います)。
日本語を含むCSVファイルの読み取り
日本語を含むCSVファイルを読み取る場合は、適切なエンコーディングを指定する必要があります。以下は、Shift-JISエンコーディングのCSVファイルを読み取る例です。
using System;
using System.IO;
using System.Text;
class JapaneseCsvReaderExample
{
static void Main()
{
string filePath = "japanese_sample.csv";
try
{
using (StreamReader reader = new StreamReader(filePath, Encoding.GetEncoding("shift_jis")))
{
string line;
while ((line = reader.ReadLine()) != null)
{
string[] values = line.Split(',');
foreach (string value in values)
{
Console.Write($"{value.Trim()} | ");
}
Console.WriteLine();
}
}
}
catch (IOException e)
{
Console.WriteLine($"ファイルの読み込み中にエラーが発生しました: {e.Message}");
}
}
}
このコードでは、StreamReaderのコンストラクタでEncoding.GetEncoding("shift_jis")
を指定することで、Shift-JISエンコーディングのファイルを正しく読み取ることができます。
ヘッダー行の処理
多くのCSVファイルは最初の行にヘッダー(列名)が含まれています。ヘッダー行を別途処理したい場合は、以下のようにコードを修正できます。
using System;
using System.IO;
class CsvWithHeaderExample
{
static void Main()
{
string filePath = "with_header.csv";
try
{
using (StreamReader reader = new StreamReader(filePath))
{
// ヘッダー行を読み込む
string headerLine = reader.ReadLine();
if (headerLine != null)
{
Console.WriteLine("ヘッダー:");
Console.WriteLine(headerLine);
Console.WriteLine("データ:");
}
// 残りの行を読み込む
string line;
while ((line = reader.ReadLine()) != null)
{
string[] values = line.Split(',');
foreach (string value in values)
{
Console.Write($"{value.Trim()} | ");
}
Console.WriteLine();
}
}
}
catch (IOException e)
{
Console.WriteLine($"ファイルの読み込み中にエラーが発生しました: {e.Message}");
}
}
}
このコードでは、最初にreader.ReadLine()
を呼び出してヘッダー行を別途処理し、その後でデータ行の処理を行っています。
まとめ
StreamReaderを使用したCSVファイルの読み取りは、C#プログラミングにおいて非常に一般的かつ重要なタスクです。基本的な使い方を押さえれば、大きなCSVファイルでも効率的に処理することができます。
ここで紹介した方法を基本として、エンコーディングの指定やヘッダー行の処理など、実際の用途に応じてコードをカスタマイズしていくとよいでしょう。また、より複雑なCSV処理が必要な場合は、CsvHelperなどのサードパーティライブラリの使用も検討してみてください。
StreamReaderを使いこなすことで、C#でのファイル処理の幅が大きく広がります。ぜひ実際にコードを書いて、CSVファイルの読み取りを試してみてください。
コメント