LoginSignup
3
2

More than 1 year has passed since last update.

C#用ライブラリの「Csv」を使ってみる

Posted at

はじめに

本記事はC#用ライブラリの「Csv」を使い方をサンプルを交えて述べる記事です。

Csvとは

C#でCSVファイルを読み書きするためのライブラリです。かなり簡単に使えることが特徴です。
詳細はこちらを参照ください。

CSVを使ってみる

「Csv」を使うサンプルとして、以下のようなCSVデータ(ウェブページの閲覧ログのイメージ)において、ページごとのユニークユーザー数を算出してみます。
image.png
ユニークユーザー数とは重複を取り除いたユーザー数のことなので、例えば上記の製品紹介ページの場合は、ユニークユーザー数は2となります。(製品紹介ページのレコードは計5件ですが、内4件は同じユーザーID:5のユーザーなので、ユニークユーザー数としては2になります。)
では作り方を見ていきます。まずは「Csv」のインストールが必要です。VisualStudioでプロジェクトを作成し、プロジェクトを右クリックし、コンテキストメニューから「Nugetパッケージの管理」をクリックします。その後、「Csv」というNugetパッケージをインストールします。これでインストールは完了です。
Csvパッケージインストールイメージ.png
次にコードを書いていきます。実際のコードは以下です。

using Csv;

// CSVファイルを文字列で取得
var csvText = File.ReadAllText("CSVファイルのパス");

// ページごとのユニークユーザーID一覧
var uniqueUserIdsPerPage = new Dictionary<string, HashSet<string>>();

// CSVファイルの各行ごとに処理をする
foreach (var line in CsvReader.ReadFromText(csvText))
{
    // [ページ名]列の値を取得
    var pageName = line["ページ名"];
    // [ユーザーID]列の値を取得
    var userId = line["ユーザーID"];
    
    if (!uniqueUserIdsPerPage.ContainsKey(pageName))
    {
        // 該当のページに対応するユーザーIDが一件も追加されていない場合はユーザーIDリストを初期化
        uniqueUserIdsPerPage.Add(pageName, new HashSet<string>() { userId });
    }
    else
    {
        // 該当のページに対応するユーザーIDを追加
        // HashSetへの追加なので重複追加はされない
        uniqueUserIdsPerPage[pageName].Add(userId);
    }
}

// ページごとのユニークユーザー数を出力
foreach (var (pageName, users) in uniqueUserIdsPerPage)
{
    Console.WriteLine($"{pageName}:{users.Count}");
}

コードの説明をしていきます。
CSVファイルの内容を文字列で取り出し、以下のforeach文でCSVの各行ごとに反復処理をします。

// CSVファイルの各行ごとに処理をする
foreach (var line in CsvReader.ReadFromText(csvText))
{
    // 各行ごとにこの処理を実施
}

foreach内部ではまず、行ごとの[ページ名]列と[ユーザーID]列の値を取得します。
上記のコード内の変数lineは「Csv」で提供するインターフェースを実装しているため、以下のように列名を使ってインデクサアクセスをすることで、その列名に対応する列の値が取得できます。

// [ページ名]列の値を取得
var pageName = line["ページ名"];
// [ユーザーID]列の値を取得
var userId = line["ユーザーID"];

次に、取得したページ名ごとにユーザーIDの値をHashSetに詰めていきます。HashSetへの登録なので、重複したユーザーIDは登録されず、この方法でデータを登録していくことで、ページごとのユニークユーザーのIDリストが作成できます。

if (!uniqueUserIdsPerPage.ContainsKey(pageName))
{
    // 該当のページに対応するユーザーIDが一件も追加されていない場合はユーザーIDリストを初期化
    uniqueUserIdsPerPage.Add(pageName, new HashSet<string>() { userId });
}
else
{
    // 該当のページに対応するユーザーIDを追加
    // HashSetへの追加なので重複追加はされない
    uniqueUserIdsPerPage[pageName].Add(userId);
}

foreachを抜けたのちに、登録した情報を使ってページ数ごとのユニークユーザーを出力します。

// ページごとのユニークユーザー数を出力
foreach (var (pageName, users) in uniqueUserIdsPerPage)
{
    Console.WriteLine($"{pageName}:{users.Count}");
}

出力結果は以下のようになります。
実行結果.png
使ってみて感じた「Csv」の良さは、とにかく手軽に使えることだと思います。Csvのテキストから各行ごとの反復処理がすぐに書けますし、列名を指定して値を取得できるのもかなり便利だと思いました。手軽にCsvを操作したいときに役立つライブラリだと思いました。

まとめ

本記事では、C#用ライブラリの「Csv」を使い方をサンプルを交えて述べました。
とにかく手軽に使えることが「Csv」の良さだと感じたので、サクッとCSVをC#で操作したいときには使ってみることをお勧めします。

3
2
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
3
2