MENU

【C#】CSVを1行ずつ読み込む方法

CSVファイルは、データを保存や交換するための一般的な形式です。C#でプログラミングをしていると、CSVファイルを扱う機会は多いでしょう。特に、大きなCSVファイルを処理する場合、メモリ効率を考えて1行ずつ読み込む方法が重要になります。この記事では、C#でCSVファイルを1行ずつ読み込む方法について、初心者の方にも分かりやすく解説します。

目次

CSVファイルを1行ずつ読み込む基本的な方法

C#でCSVファイルを1行ずつ読み込むには、System.IO名前空間のStreamReaderクラスを使用します。以下に、基本的な読み込み方法を示すコード例を見てみましょう。

using System;
using System.IO;

class CsvReadExample
{
    static void Main()
    {
        string filePath = "sample.csv";  // CSVファイルのパス

        try
        {
            using (StreamReader reader = new StreamReader(filePath))
            {
                string line;
                int lineNumber = 0;

                // ファイルの終わりまで1行ずつ読み込む
                while ((line = reader.ReadLine()) != null)
                {
                    lineNumber++;
                    Console.WriteLine($"行 {lineNumber}: {line}");

                    // ここで各行の処理を行う
                    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. 読み込んだデータを表示します(実際の処理はここで行います)。

注意点とTips

  1. エンコーディング: 日本語を含むCSVファイルを読み込む場合は、適切なエンコーディングを指定する必要があります。
using (StreamReader reader = new StreamReader(filePath, System.Text.Encoding.GetEncoding("shift_jis")))

2.ヘッダー行の処理: 多くのCSVファイルは1行目にヘッダーがあります。必要に応じて最初の行を別途処理しましょう。

string headerLine = reader.ReadLine();  // ヘッダー行を読み込む
// ヘッダーの処理

3.クォーテーションの処理: カンマを含むフィールドはダブルクォーテーションで囲まれていることがあります。このような場合、単純なSplitでは正しく処理できないため、より高度な解析が必要になります。

4.大きなファイルの処理: 非常に大きなCSVファイルを処理する場合は、StreamReaderを使用する方法が効率的です。全ての行を一度にメモリに読み込む方法は避けましょう。

応用例:CSVデータを構造化する

実際のアプリケーションでは、CSVデータを構造化したオブジェクトに変換することがよくあります。以下は、簡単な例です:

using System;
using System.IO;
using System.Collections.Generic;

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string City { get; set; }
}

class CsvStructuredReadExample
{
    static void Main()
    {
        string filePath = "people.csv";
        List<Person> people = new List<Person>();

        try
        {
            using (StreamReader reader = new StreamReader(filePath))
            {
                // ヘッダー行をスキップ
                reader.ReadLine();

                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    string[] values = line.Split(',');
                    if (values.Length == 3)
                    {
                        Person person = new Person
                        {
                            Name = values[0].Trim(),
                            Age = int.Parse(values[1].Trim()),
                            City = values[2].Trim()
                        };
                        people.Add(person);
                    }
                }
            }

            // 読み込んだデータの表示
            foreach (var person in people)
            {
                Console.WriteLine($"名前: {person.Name}, 年齢: {person.Age}, 都市: {person.City}");
            }
        }
        catch (Exception e)
        {
            Console.WriteLine($"エラーが発生しました: {e.Message}");
        }
    }
}

この例では、CSVファイルから読み込んだデータをPersonオブジェクトのリストに変換しています。

まとめ

C#でCSVファイルを1行ずつ読み込む方法は、StreamReaderクラスを使用することで簡単に実現できます。この方法は、大きなファイルを効率的に処理する場合に特に有用です。

CSVファイルの内容や目的に応じて、ヘッダーの処理やデータの構造化など、適切な方法を選択することが重要です。また、エンコーディングやクォーテーションの処理にも注意を払う必要があります。

これらの基本を押さえておけば、C#でのプログラミングでCSVファイルを扱う多くのタスクをこなすことができるでしょう。

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

コメント

コメントする

目次