C#プログラミング

【C#】csvファイルを出力する簡単な方法【サンプルあり】

csvファイル出力方法紹介記事のアイキャッチ画像 C#

C#でcsvファイルを出力する方法を紹介します。集計アプリやデータ分析アプリを作成する際、何かしらの形で結果を保存したい場合に使用できます。簡単な方法を紹介するのでサンプルコードはかなりシンプルです。

スポンサーリンク

csvファイルとは?何の略?

コード作成には直接関係ないですが、一応説明をします。

csvとは、Comma Separated Value(カンマで区切った値)の略で、その名の通り各要素を「,」で区切って記述されたファイル形式です。

その単純さから容量が小さく、書き込み・読み込みがしやすく、人の頭の中でも挙動がイメージしやすいです。

逆に「要素毎にカンマで区切っただけ」であるが故に、特定の要素に色を付けたり、フォントを変えたりといった編集はできません。

まとめると
csvファイル形式は、構造が単純で、汎用性が高くいので、(大量の)データを記録するのに向いている形式です。

スポンサーリンク

csvファイルを出力するサンプルコード

List<>に適当な数値配列を追加し、その中身をcsvファイルとして出力します。
かなりシンプルですが、これが分かれば十分かと思います。

C#コード

csv出力するリストを作成して、そのリストをcsv出力メソッド(Output_CSV)へ渡しています。

//リスト(csv出力するもの)
var MyList = new List<int[]>();

//リストに追加する配列
int[] arry1 = new int[] { 1, 2, 3, 4, 5 };
int[] arry2 = new int[] { 10, 20, 30, 40, 50 };
int[] arry3 = new int[] { 100, 200, 300, 400, 500 };


//リストに要素を追加
MyList.Add(arry1);
MyList.Add(arry2);
MyList.Add(arry3);

//csv出力メソッドへ(次に記載)
Output_CSV(MyList);

csv出力メソッドは以下の通り。
csvファイルへの書き込みは、リスト内の配列分・配列の要素分の二重のfor文で行います。

//csv出力メソッド
private void Output_CSV(List<int[]> list)
{
    //ファイル名
    string filename = "";

    //ファイル名に(本例ではファイル名に日付を活用)
    DateTime dt = DateTime.Now;
    filename = dt.ToString("yyyyMMdd_");

    //保存ダイアログの生成 -------------------
    Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
    dlg.Title = "保存先を指定してください";
    //保存先を設定(ここではデスクトップ)
    dlg.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
    dlg.Filter = "CSVファイル(*.csv)|*.csv";
    dlg.FileName = filename;


    if (dlg.ShowDialog() == true)
    {
        //ストリーム(連続するバイト列)を生成。これに記載していく
        StreamWriter SW = new StreamWriter(dlg.FileName, false, Encoding.UTF8);

        //テキストをファイルに書き込む
        SW.WriteLine("= = = OUTPUT = = =");

        //★リストの中身を書き込む ---------------
        //リスト内の要素ごとにループ
        for(int i=0 ; i < list.Count; i++)
        {
            //各要素内でループ
            for(int j = 0; j < list[i].Length; j++)
            {
                //1要素記載後、カンマ記載
                SW.Write(list[i][j]);
                SW.Write(",");
            }

            //改行の書き込み
            SW.WriteLine();
        }
        SW.Close();
    }

今回はリストでやっていますが、コレクションなどでも同等なコードでできます。

出力されるcsvファイル

以下画像は、出力されたcsvファイルを開いた様子。

保存されたcsvファイルの様子1
テキストエディタで開いた様子
保存されたcsvファイルの様子2
エクセルで開いた様子

ちゃんとリストの内容が記載されていますね。行の終わりに「,」を付けるべきかは調べましたが不明でした。

csvの読み込み方法は以下で紹介しています。

以下の記事ではdatagridの使い方を紹介しています。本記事内容と組み合わせれば、Datagridの中身をcsv出力できます。

コメント

タイトルとURLをコピーしました