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の読み込み方法は以下で紹介しています。
さいごに
以下の記事ではdatagridの使い方を紹介しています。本記事内容と組み合わせれば、Datagridの中身をcsv出力できます。







コメント