MENU

C# StreamReaderを使用したCSVの読み取り

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ファイルを読み込んでいます:

  1. StreamReaderオブジェクトを作成し、CSVファイルを開きます。
  2. whileループを使用して、ファイルの終わりまで1行ずつ読み込みます。
  3. 各行をSplitメソッドでカンマ区切りで分割し、個々の値を取得します。
  4. 読み込んだデータを表示します(実際の処理はここで行います)。

日本語を含む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ファイルの読み取りを試してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次