CSV

【C# CSVライブラリ】CsvHelperより簡単に使える「Csv」の使い方

はじめに

今回は、シンプルに使えるCSVライブラリ「Csv」の使い方を紹介します。以下の方におすすめです。

おすすめしたいユーザー
  • CsvHelperみたいな高機能はいらない
  • 機能を覚えるのがめんどくさい
  • ちょっとパースしたいだけ

Csvについて

2020年10月末に公開された新しいライブラリです
公式にも「Really Simple~」と記載があるように、使い方はとてもシンプルです。配列に読み込んだ後、要素を数字・カラム名で指定することで、読み込んだデータを使用できます。

「行のスキップ」や「トリム」などの便利オプションも備えているので、
サクっと使えるライブラリです。

環境

この記事の内容は、以下の環境で作成しています。

  • C# コンソールプログラム
  • .NET 4.7.2
  • Csv 2.0.62 ※ NuGetでインストール

解説

以下の流れで説明していきます。

解説の流れ
  • 読み込むCSVファイル
  • 全体のソースコード
  • 実行結果
  • CSVの読込コードの解説
  • CSVの出力コードの解説

読み込むCSVファイル

実行ファイルと同じフォルダに、以下のCSVファイルがあることを前提としています。下記のコードを確認する場合は以下の「sample.csv」を実行ファイルと同じ場所においてください。

データ1,データ2,データ3
1,2,3
10,20,30

ソースコード

全体のソースコードは以下の通りです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


using System.IO;    // Fileを使うのに必要です
using Csv;              // ライブラリCsv を使うのに必要です

namespace ConsoleAppLibCsvTest
{
    class Program
    {
        static void Main(string[] args)
        {

            //
            // ----- CSVファイルの読み込み -----
            //

            // ファイルの全内容を文字列に読込みます
            string csv = File.ReadAllText("sample.csv");

            // ファイルの1行分を2次元配列として取得します
            foreach (var line in CsvReader.ReadFromText(csv))
            {

                // ヘッダーは除去されているので、初回からデータが返されます。

                // Indexの番号指定でアクセス
                var firstCell = line[0];

                // カラム名でアクセス
                var byName = line[@"データ2"];

                // 取得データの表示です。
                Console.WriteLine("firstCell: " + firstCell);
                Console.WriteLine("byName   : " + byName);
            }

            //
            // ---------- CSVデータの出力 ----------
            //

            // 書き込むヘッダー行を作成します
            string[] header = new string[] { "データA", "データB", "データC" };

            // 書き込むデータを作成します
            string[][] newLine = new string[][]
            {
                new [] { "11", "21", "31" }
            };

            // データからCSV形式の文字列を生成します
            string outcsv = CsvWriter.WriteToText(header, newLine);

            // 文字列をファイルに出力します
            File.WriteAllText("outfile.csv", outcsv);

            Console.WriteLine("何かキーを押すと終了");
            Console.ReadKey();
        }
    }
}


実行結果

上記のコードを実行すると、以下の場面が表示されます。

CSVファイルは以下のように出力されます。

データA,データB,データC
11,21,31

CSVの読み込み

CSVの読み込みでポイントは以下の部分です。

① CSVファイルの内容を、一つの文字列(string)として読み取ります。

// ファイルの全内容を文字列に読込みます
 string csv = File.ReadAllText("sample.csv");

② 文字列からデータを生成します

文字列をライブラリのCsvReader.ReadFromText()に渡すと、CSVファイル内のデータ 1行分がstringの2次元配列として返されます。

ヘッダー部分は除去されているので、ReadFromText()の初回のからデータ部分が返されます。

 foreach (var line in CsvReader.ReadFromText(csv))

③ 2次元配列にアクセスします
2次元配列は、インデックスの番号・ヘッダーのカラム名でアクセス可能です。

// Indexの番号指定でアクセス
 var firstCell = line[0];

 // カラム名でアクセス
 var byName = line[@"データ2"];

CSV出力

CSV出力でポイントとなるコードは以下の部分です

stringの多次元配列のデータ内容を、CsvWriter.WriteToText()に渡すことで、CSV形式の文字列が生成されます。

上記文字列を、WriteAllText()などでファイルに書き込めば、CSVのファイル出力が完了します。

// データからCSV形式の文字列を生成します
string outcsv = CsvWriter.WriteToText(header, newLine);

まとめ

今回は、シンプルに使えるCSVライブラリ「Csv」の使い方を紹介しました。

便利オプションはどう使うの?というか方は以下の記事もご覧ください。

参考になればうれしいです。

応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です